POJ3984——迷宮問題

Problem

定義一個二維數(shù)組:
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,
};
它表示一個迷宮,其中的1表示墻壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求編程序找出從左上角到右下角的最短路線。

Input

一個5 × 5的二維數(shù)組,表示一個迷宮。數(shù)據(jù)保證有唯一解。

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)


思路

迷宮最短路模板題,借助queue,BFS即可,用stack輔助記錄路徑。

代碼

#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int maze[5][5],vis[5][5]={0},dist[5][5];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
struct Node {
    int x,y;
    Node(int x,int y):x(x),y(y){}
    Node(){}
}pre[5][5];
queue<Node> Q;

void BFS() {
    while(!Q.empty()) Q.pop();
    dist[0][0]=0;
    vis[0][0]=1;
    Q.push(Node(0,0));
    while(!Q.empty())  {
        Node node=Q.front();Q.pop();
        int x=node.x,y=node.y;
        for(int d=0;d<4;d++)  {
            int nx=x+dx[d];
            int ny=y+dy[d];
            if(nx>=0&&nx<5&&ny>=0&&ny<5&&vis[nx][ny]==0&&maze[nx][ny]==0)  {
                vis[nx][ny]=1;
                Q.push(Node(nx,ny));
                dist[nx][ny]=1+dist[x][y];
                pre[nx][ny]=Node(x,y);
                if(nx==4&&ny==4) return;
            }
        }
    }
}

int main()  {
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            cin>>maze[i][j];
    BFS();
    stack<Node> S;
    int cur_x=4,cur_y=4;
    while(1){
        S.push(Node(cur_x,cur_y));
        if(cur_x==0&&cur_y==0) break;
        int x=cur_x,y=cur_y;
        cur_x=pre[x][y].x;
        cur_y=pre[x][y].y;
    }
    while(!S.empty()){
        Node node=S.top();
        cout<<'('<<node.x<<", "<<node.y<<')'<<endl;
        S.pop();
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目: Description定義一個二維數(shù)組: int maze[5][5]= {0, 1, 0, 0, 0,0...
    科學(xué)旅行者閱讀 1,100評論 1 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評論 19 139
  • Description 定義一個二維數(shù)組:int maze[5][5] = {0, 1, 0, 0, 0,0, 1...
    Gadore千里閱讀 1,904評論 0 0
  • 我在后臺收到一條留言,來自于一個剛畢業(yè)兩年的大學(xué)生,他說: “以前上學(xué)的時候覺得夢想就是個借口,可工作了之后才覺得...
    陶瓷兔子閱讀 2,002評論 2 63
  • 今天平靜的微博上忽然翻起了一股浪。 標(biāo)題為 張靚穎母親手撕未來女婿馮軻 的新聞陸續(xù)浮現(xiàn)。八卦心旺盛的我自然是不會錯...
    賤賤小姐閱讀 228評論 0 0

友情鏈接更多精彩內(nèi)容