Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 10783 | Accepted: 6435 |
Description
int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, };
Input
Output
Sample Input
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4)(4, 4)
#include <iostream> #include <cstdio> #include <queue> #include <vector> #include <algorithm> using namespace std; typedef pair<int, int> P; const int INF = 10000000; int s[5][5], d[5][5]; int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1}; struct node { int x, y; }; node e, pre[5][5]; void bfs() { queue <P> que; fill(d[0], d[0] + 25, INF); que.push(P(0, 0)); d[0][0] = 0; while(! que.empty()) { P p = que.front(); que.pop(); if(p.first == 4 && p.second == 4) break; for(int i = 0; i < 4; i++) { int x = p.first + dx[i], y = p.second + dy[i]; if(x >= 0 && x < 5 && y >= 0 && y < 5 && s[x][y] == 0 && d[x][y] == INF) { que.push(P(x, y)); d[x][y] = d[p.first][p.second] + 1; e.x = p.first, e.y = p.second; pre[x][y] = e; } } } vector <node> path; e.x = 4, e.y = 4; path.push_back(e); for(int i = 4, j = 4; i || j; i = e.x, j = e.y) { e = pre[i][j]; path.push_back(e); } reverse(path.begin(), path.end()); for(vector <node> :: iterator pp = path.begin(); pp != path.end(); pp++) printf("(%d, %d)\n", pp -> x, pp -> y); } int main() { for(int i = 0; i < 5; i++) for(int j = 0; j < 5; j++) scanf("%d", &s[i][j]); bfs(); return 0; }
因篇幅问题不能全部显示,请点此查看更多更全内容