迷宫问题(dfs)POJ

来源:互联网 发布:经典文案 知乎 编辑:程序博客网 时间:2024/06/09 15:02

题目大意:有一个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;}}}


0 0
原创粉丝点击