题解:
记录路径的简单bfs
代码:
#include<iostream> #include<cstdio> #include<queue> using namespace std; int mp[6][6]; int derti[1000]; int dir[4][2] = { 1,0,0,1,-1,0,0,-1 }; struct point { int x; int y; struct point *parent; }; void searves(point *rens) { if (rens->parent != 0) { searves(rens->parent); } cout <<"("<< rens->x << ", " << rens->y<<")" << endl; return; } void bfs() { point *p = new point; p->x = 0; p->y = 0; p->parent = 0; queue<point *>q; q.push(p); while (!q.empty()) { point *rent = q.front(); q.pop(); for (int i = 0; i < 4; i++) { int xx = rent->x + dir[i][0]; int yy = rent->y + dir[i][1]; if (xx >= 0 && xx < 5 && yy >= 0 && yy < 5 && mp[xx][yy] == 0) { point *rens = new point; rens->x = xx; rens->y = yy; rens->parent = rent; if (xx == 4 && yy == 4) { searves(rens); return; } q.push(rens); } } } } int main() { for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) cin >> mp[i][j]; bfs(); return 0; }