迷宮(最簡單的01迷宮模板) 2018 8 13

2021-08-22 19:47:42 字數 1385 閱讀 4040

【問題描述】

鐵塔尼號遇險了!他發出了求救訊號。距離最近的哥倫比亞號收到了訊息,時間就是生命,必須盡快趕到那裡。

通過偵測,哥倫比亞號獲取了一張海洋圖。這張圖將海洋部分分化成 n*n 個比較小的單位,其中用 1

標明的是陸地,用 0 標明是海洋。船隻能從乙個格仔,移到相鄰的四個格仔。

為了盡快趕到出事地點,哥倫比亞號最少需要走多遠的距離。

【輸入格式】

第一行為 n,下面是乙個 n*n 的 0、1 矩陣,表示海洋地圖

最後一行為四個小於 n 的整數,分別表示哥倫比亞號和鐵塔尼號的位置。

【輸出格式】

哥倫比亞號到鐵塔尼號的最短距離,答案精確到整數。

【輸入樣例】

3001

101100

1 1 3 3

【輸出樣例】

4深搜模板

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

int n,outx,outy,inx,s,iny,x1,y1,ans=99999999;

int tox[5]=;

int toy[5]=;

int a[1001][1001],b[1001][1001];

char c[1001][1001];

void dfs(int x,int y)

if(s>=b[x][y])

return ;

else

b[x][y]=s;

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

}int main()

scanf("%d%d",&inx,&iny);

scanf("%d%d",&outx,&outy);

memset(b,0x7f,sizeof(b));

/*for(int i=1;i<=n;i++)

;int toy[5]=;

int a[1001][1001],b[1001][1001],d[1000001][4];

char c[1001][1001];

int main()

scanf("%d%d",&inx,&iny);

scanf("%d%d",&outx,&outy);

b[inx][iny]=1;

d[1][1]=inx;

d[1][2]=iny;

d[1][3]=0;

while(tn||y<1||y>n)

continue;

if(!a[x][y]&&!b[x][y])

if(x==outx&&y==outy)

}} for(int i=1;i<=n;i++)

return 0;

}

最簡單的迷宮求解

在計算機中,我們可以把迷宮當做乙個二維陣列。其中0表示通路,1表示牆。我們以下圖為例,對於只有一條通路的簡單迷宮進行求解 該迷宮儲存在 map.txt 文件中。對於該迷宮,我們首先將入口點壓入棧中,然後通過對該點的上 右 下 左分別進行探測,找到合適的點前進,並將該點壓入棧中。為了防止將已經走過的點...

實現簡單的迷宮

我們知道棧的特點是 後進先出 first in last out 也就是說只能在棧的尾部進 行壓棧和出棧,而且出棧的時候只能從最後乙個資料開始。所以我們利用棧這個特點,來實現這個迷宮。在這之中我們要採用 回溯 的方法去處理當遇到路徑不通的情況。原理 每找到乙個通路,就將這個資料壓棧,這樣當前位置的上...

簡單的迷宮問題

給你乙個n m的迷宮,這個迷宮中有以下幾個標識 s代表起點 t代表終點 x代表障礙物 代表空地 現在你們涵哥想知道能不能從起點走到終點不碰到障礙物 只能上下左右進行移動,並且不能移動到已經移動過的點 輸入第一行乙個整數t 1 t 10 接下來有t組測試資料,對於每一組測試資料,第一行輸入2個數n和m...