【問題描述】
鐵塔尼號遇險了!他發出了求救訊號。距離最近的哥倫比亞號收到了訊息,時間就是生命,必須盡快趕到那裡。
通過偵測,哥倫比亞號獲取了一張海洋圖。這張圖將海洋部分分化成 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...