洛谷P1238 走迷宫

走迷宫

题目链接

这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序。
还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的。
然后应该就没有什么了吧。。。
AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 10010
using namespace std;
int G[MAXN][MAXN];
int vis[MAXN][MAXN];
int m,n;
int SX,SY,EX,EY;
int P[MAXN][2];
int total=0;
int next[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
void dfs(int x,int y,int step)
{
	//if(x<1||x>m||y<1||y>n) return;
	P[step][0]=x;
	P[step][1]=y;
	if(x==EX&&y==EY)
	{
		for(int i=0;i<step;i++)
		{
			printf("(%d,%d)->",P[i][0],P[i][1]);
		}
		printf("(%d,%d)\n",P[step][0],P[step][1]);
		total++;
		return;
	}
	//int a;
//	int b;
	for(int i=0;i<=3;i++)
	{
		int a=x+next[i][0];
		int b=y+next[i][1];
		if(G[a][b]==1&&vis[a][b]==0)
		{
			vis[a][b]=1;
			dfs(a,b,step+1);
			vis[a][b]=0;
		}
	}
}
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&G[i][j]);
		}
	}
	scanf("%d%d%d%d",&SX,&SY,&EX,&EY);
	vis[SX][SY]=1;
	dfs(SX,SY,0);
	if(total==0)
	{
		printf("-1");
	}
	return 0;
}
posted @ 2019-04-09 11:54  LITTLESUN_wl  阅读(153)  评论(0编辑  收藏  举报