POJ-3984迷宫问题dfs

来源:互联网 发布:爱奇艺自制网络剧破案 编辑:程序博客网 时间:2024/06/05 00:11
5*5的大小,不用担心会超时。
用了两遍DFS,第一遍找出最短路径,第二遍记录节点
#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<stack>#include<cstring>#include<string>using namespace std;int minn;int t = 0;int a[10][10],b[10][10];int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};struct node{int px,py;}p[100];int is_out(int x,int y){if(x >= 0 && x < 5 && y >= 0 && y < 5) return 1;return 0;}void dfs1(int x,int y,int sum){if(x == 4 && y == 4){minn = min (sum,minn);return;}for(int i = 0;i < 4;i++){int xx = x + dx[i],yy = y + dy[i];if(is_out(xx,yy) && a[xx][yy] == 0 && b[xx][yy] == 0){b[xx][yy] = 1;dfs1(xx,yy,sum + 1);b[xx][yy] = 0;}}}void dfs2(int x,int y,int sum){if(x == 4 && y == 4){if(sum == minn && t == 0){t = 1;for(int i = 0;i < sum;i++){printf("(%d, %d)\n",p[i].px,p[i].py);}}return;}for(int i = 0;i < 4;i++){int xx = x + dx[i],yy = y + dy[i];if(is_out(xx,yy) && a[xx][yy] == 0 && b[xx][yy] == 0){b[xx][yy] = 1;p[sum].px = xx,p[sum].py = yy;dfs2(xx,yy,sum + 1);b[xx][yy] = 0;}}}int main(){minn = 100;for(int i = 0;i < 5;i++){for(int j = 0;j < 5;j++) scanf("%d",&a[i][j]);}memset(b,0,sizeof(b));dfs1(0,0,1);p[0].px = 0,p[0].py = 0;dfs2(0,0,1);return 0;}

原创粉丝点击