首页 > 代码库 > poj-3084 输出路径的BFS
poj-3084 输出路径的BFS
http://poj.org/problem?id=3984
#include<stdio.h> #include<iostream> #include<math.h> #include<stdlib.h> #include<ctype.h> #include<algorithm> #include<vector> #include<string.h> #include<queue> #include<stack> #include<set> #include<map> #include<sstream> #include<time.h> #include<utility> #include<malloc.h> #include<stdexcept> #include<iomanip> #include<iterator> using namespace std; int n, m; int p[35][35]; int vis[6][6]; int dir[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } }; struct node { int x; int y; }; struct node pre[30][30];//存储节点前一个位置 int check(int x, int y) { if (x >= 0 && x < 5 && y >= 0 && y < 5) return 1; return 0; } void printf_path() { stack<node> path;//栈用来保存路径 node ss; ss.x = 4; ss.y = 4; while (1) { path.push(ss); if (!ss.x && !ss.y) break; ss = pre[ss.x][ss.y]; } while (!path.empty()) { ss = path.top(); path.pop(); printf("(%d, %d)\n",ss.x,ss.y); } } void bfs() { memset(vis,0,sizeof(vis)); queue <node> q; node qq, qqq; qq.x = 0; qq.y = 0; vis[0][0] = 1; q.push(qq); while (!q.empty()) { qq = q.front(); q.pop(); if (qq.x == 4 && qq.y == 4) { printf_path(); return; } for (int i = 0; i < 4;i++) { int x = qq.x + dir[i][0]; int y = qq.y + dir[i][1]; if (!check(x,y) || vis[x][y] || p[x][y] == 1) continue; qqq = qq; qqq.x = x; qqq.y = y; pre[qqq.x][qqq.y] = qq; vis[x][y] = 1; q.push(qqq); } } return; } int main() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cin >> p[i][j]; } } bfs(); return 0; }
poj-3084 输出路径的BFS
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。