走迷宮
題目鏈接
這道題第一次寫的時候寫了好久,因為不會寫輸出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;
}