POJ-3984___迷宮問題——BFS+路徑記錄
阿新 • • 發佈:2018-12-16
題目大意:
從走到求最短路徑並輸出
解題思路:
無
程式碼思路:
無
核心:用一道簡單題記錄一下模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; int dx[]= {1,-1,0,0}; int dy[]= {0,0,1,-1}; int cnt, mp[10][10]; bool vis[10][10]; stack <pii> r; struct pot { int u, v; pot *pre; }; void BFS(int u, int v) { queue <pot> Q; pot q, n, n_cnt[700]; q.u = u, q.v = v; q.pre = NULL; Q.push(q); vis[u][v] = true; while(!Q.empty()) { q = Q.front(); Q.pop(); for(int i=0; i<=4; i++) { n.u=q.u+dx[i]; n.v=q.v+dy[i]; if(n.u<1 || n.u>5 || n.v<1 || n.v>5) continue; if(vis[n.u][n.v] || mp[n.u][n.v]) continue; //cout<<n.u<<" "<<n.v<<endl; vis[n.u][n.v] = true; n_cnt[cnt] = q; n.pre = &n_cnt[cnt++]; //這裡一開始弄錯了、沒連起來.... if(n.u==5 && n.v==5) { while(n.pre) { r.push(make_pair(n.u, n.v)); n = *n.pre; } r.push(make_pair(1, 1)); return; } Q.push(n); } } } void print() { while(!r.empty()) { printf("(%d, %d)\n", r.top().first-1, r.top().second-1); r.pop(); } } int main() { for(int i=1; i<6; i++) for(int j=1; j<6; j++) scanf("%d", &mp[i][j]); BFS(1, 1); print(); }