生活随笔
收集整理的這篇文章主要介紹了
营救
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述:
鐵塔尼號遇險了!他發出了求救信號。距離最近的哥倫比亞號收到了訊息,時間就是生命,必須盡快趕到那里。
通過偵測,哥倫比亞號獲取了一張海洋圖。這張圖將海洋部分化成nn個比較小的單位,其中用1標明的是陸地,用0標明是海洋。當然,船只能在海洋上行駛,且船只能從一個格子,移到相鄰的四個格子。
為了盡快趕到出事地點,哥倫比亞號最少需要走多遠的距離。
數據輸入:
從文件save.in中讀入數據,第一行為n,下面是一個nn的0,1矩陣,表示海洋地圖,最后一行為四個小于n的整數,分別表示哥倫比亞號和鐵塔尼號的位置。
數據輸出:
哥倫比亞號到鐵塔尼號的最短距離,答案精確到整數。
輸入輸出樣例:
save. in
3
001
101
100
1 1 3 3
save.out
4
數據范圍說明:N<=1000。
.
.
.
.
.
分析
廣搜
到達目的地就直接輸出
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int gry[800000][3],n,m,a[1010][1010],f[1010][1010];
int x1,y1,x2,y2;void bfs()
{int head=0,tail=1;while (head<tail){head++;for (int i=0;i<=3;i++){int x=gry[head][0]+d[i][0];int y=gry[head][1]+d[i][1];if (x>=1&&x<=n&&y>=1&&y<=n&&f[x][y]==0){tail++;gry[tail][0]=x;gry[tail][1]=y;a[x][y]=gry[tail][2]=gry[head][2]+1; f[x][y]=1;}if (x==x2&&y==y2){printf("%d",a[x][y]);return;}}}
}
int main()
{freopen("save.in","r",stdin);freopen("save.out","w",stdout);scanf("%d",&n);memset(f,1,sizeof(f));for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){char x;cin>>x;f[i][j]=(int)x-'0';}scanf("%d%d%d%d",&x1,&y1,&x2,&y2);gry[1][0]=x1;gry[1][1]=y1;bfs();fclose(stdin);fclose(stdout);return 0;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/11094910.html
總結
以上是生活随笔為你收集整理的营救的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。