走迷宫
题目链接
这道题第一次写的时候写了好久,因为不会写输出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;
}