题目大意:有一个5*5的迷宫 0 表示可以走 1 表示不可以走,输出走出去的最短路线 从(0,0)到(4,4)
思路:dfs和bfs好像都可以 弱 当时只会dfs写的dfs 很简单的一个题,dfs写下来就行了。不过需要用一个数组存储
走过的路。数据有唯一性,优先右下方就可以过了 。bfs的话应该也可以不过需要记录前驱,最后输出
听说这个题只有一组数据,打印就可以了0-0
#include<stdio.h> #include<string.h> int map[6][6]; int book[6][6]; int z[30][2];//保存路径 int num=0; int flag=0; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//方向 int check(int a,int b){//判断是否可以走 if(a>=0&&a<5&&b>=0&&b<5&&book[a][b]==0&&map[a][b]==0) return 1; return 0; } void dfs(int x,int y,int n); int main(void) { int i,j; memset(book,0,sizeof(book)); for(i=0;i<5;i++){ for(j=0;j<5;j++){ scanf("%d",&map[i][j]); } } book[0][0]=1; dfs(0,0,0); // printf("%d\n",num); printf("(0, 0)\n"); for(i=0;i<num;i++){//输出坐标 printf("(%d, %d)\n",z[i][0],z[i][1]); } return 0; } void dfs(int x,int y,int n){ if(x==4&&y==4){ flag=1; num=n; return ; } int i; for(i=0;i<4;i++){if(flag) return ; int x_t=x+dir[i][0]; int y_t=y+dir[i][1]; if(check(x_t,y_t)){ book[x_t][y_t]=1; z[n][0]=x_t; z[n][1]=y_t; dfs(x_t,y_t,n+1); book[x_t][y_t]=0; // z[n][0]=0; // z[n][1]=0; } } }