POJ 3984 迷宮問題 bfs pair

2021-08-21 18:22:13 字數 1157 閱讀 2722

這道題在bfs求最短路的基礎上,要求記錄路徑,**了網上大佬的**orz,發現巧妙之處在於那個vis陣列。

想記錄下來主要是因為debug了好久qaq...就是for迴圈中p值改變的問題。。詳見注釋吧。。

#include#include#include#include#includeusing namespace std;

#define ll long long

const int inf=0x3f3f3f3f;

int a[6][6];

int dx[4]=;

int dy[4]=;

int vis[6][6];

typedef pairpp;

void bfs()

}//cout<<"q.size="<=0&&xx<5&&yy>=0&&yy<5)

if(vis[p.first][p.second]-vis[xx][yy]==1)

}if(p.first==0&&p.second==0)

break;

}//cout<<"tol="<=0;i--)

printf("(%d, %d)\n",a[i].first,a[i].second);

}int main()

後來重新刷了這道題,發現其實很簡單。。多加乙個pre陣列記錄路徑,再用乙個棧(或者n*n長的陣列)逆序輸出就好了。ac**如下:

#include#include#include#include#include#includeusing namespace std;

typedef pairpp;

#define mkp make_pair

int n=5;

int maze[7][7];

int d[4][2]=,,,};

int vis[7][7]; //記錄是否被訪問,以及路徑長度(步數)

pp pre[7][7];

stackans; //也可以換成乙個n*n的陣列,逆序輸出

void bfs()

break;

}for(int i=0;i<4;i++)}}

while(!ans.empty())

}int main()

POJ3984 迷宮問題

題目 迷宮問題 time limit 1000ms memory limit 65536k total submissions 3183 accepted 1861 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎...

POJ 3984 迷宮問題

一道比較簡單的bfs題 include include include include define max 6 using namespace std int map max max px max max py max max int movex 4 movey 4 bool vis max ma...

POJ 3984 迷宮問題

迷宮問題 time limit 1000ms memory limit 65536k total submissions 7047 accepted 4123 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,...