【BFS】营救(save)

描述

铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快 赶到那里。 通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分分化成 n*n 个比较小的单位,其中用 1 标明的是陆地,用 0 标明是海洋。船只能从一个格子,移到相邻的四个格子。

题目

为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。

输入

第一行为 n(n≤1000),下面是一个 n*n 的 0、1 矩阵,表示海洋地图 最后一行为四个小于 n 的整数,分别表示哥伦比亚号和铁塔尼号的位置。

输出

哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。

 输入样例 1

3
001
101
100
1 1 3 3 

输出样例 1

4

解题思路

  本题只需用广搜找最短路即可。

题解

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int dir[4][2]={1,0,0,1,-1,0,0,-1};
 4 int x1,yy,x2,y2,n;
 5 int dz[1005][1005];
 6 struct node{
 7     int x;
 8     int y;
 9     int t;
10 };
11 void bfs(int x,int y)
12 {
13     node p,t;
14     p.x=x;
15     p.y=y;
16     p.t=0;
17     queue<node> q;
18     for(q.push(p);!q.empty();q.pop())
19     {
20         p=q.front();
21         if(p.x==x2&& p.y==y2)
22         {
23             printf("%d\n",p.t);
24             break;
25         }
26         for(int i=0;i<4;i++)
27         {
28             t.x=p.x+dir[i][0];
29             t.y=p.y+dir[i][1];
30             if(t.x>0&&t.x<=n&&t.y>0&&t.y<=n&&!dz[t.x][t.y])
31             {
32                 dz[t.x][t.y]=1;
33                 t.t=p.t+1;
34                 q.push(t);
35             }
36         }
37     }
38 }
39 int main()
40 {
41     cin>>n;
42     for(int i=1;i<=n;i++)
43     {
44         for(int j=1;j<=n;j++)
45         {    char c;
46             cin>>c;
47             dz[i][j]=c-‘0‘;
48         }
49     }
50     scanf("%d%d%d%d",&x1,&yy,&x2,&y2);
51     dz[x1][yy]=1;
52     if(x1==x2&&yy==y2)
53         cout<<0;
54     else
55         bfs(x1,yy);
56     return 0;
57 }

原文地址:https://www.cnblogs.com/hualian/p/11159187.html

时间: 2024-11-01 20:48:08

【BFS】营救(save)的相关文章

ZOJ 3814 Sawtooth Puzzle(牡丹江网络赛F题)

ZOJ 3814 Sawtooth Puzzle 题目链接 记录状态广搜,把9个拼图都压缩成一个状态,然后去搜索,就是模拟的过程比较麻烦 代码: #include <cstdio> #include <cstring> #include <queue> #include <algorithm> #include <set> using namespace std; typedef unsigned long long ll; int t; int

HDU 1242 Rescue营救 BFS算法

题目链接:HDU 1242 Rescue营救 Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16524    Accepted Submission(s): 5997 Problem Description Angel was caught by the MOLIGPY! He was put in prison by

救援行动(save) (BFS)

时间限制: 1 Sec  内存限制: 64 MB提交: 42  解决: 9[提交][状态][讨论版] 题目描述 Angel被人抓住关在一个迷宫了!迷宫的长.宽均不超过200,迷宫中有不可以越过的墙以及监狱的看守.Angel的朋友带了一个救援队来到了迷宫中.他们的任务是:接近Angel.我们假设接近Angel就是到达Angel所在的位置.假设移动需要1单位时间,杀死一个看守也需要1单位时间.到达一个格子以后,如果该格子有看守,则一定要杀死.交给你的任务是,最少要多少单位时间,才能到达Angel所在

洛谷 P4011 孤岛营救问题【bfs】

注意: 一个点可能有多把钥匙,所以把每个点有钥匙的情况状压一下 两个点之间有障碍的情况只给出了单向,存的时候记得存一下反向 b[i][j]表示当前点拥有钥匙的状态,g[x1][y1][x2][y2]表示两点之间门的类型(0表示没有,-1表示墙比较方便),f[i][j][k]表示点(i,j)在拥有k状态钥匙的情况下的最小步数,v[i][j][k]表示f[i][j][k]的状态是否在bfs队列里.然后转移比较类似spfa 以及终于知道为什么这种题会在24题里了-因为24全名"网络流与线性规划二十四题

[题解]luogu_P4011_孤岛营救问题(状压bfs/最短路

钥匙只有10种可以状压,最短路或者bfs都行,但是写挂了(现在还是 #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define pb push_back using namespace std; const int maxn=13; const int dx[]={-1,0,1,0}; const int dy[]={0,1,0,-1}; int n,m,p,k,

Rescue(BFS时间最短)

Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is: approach Angel. We assume

[ACM] hdu 1242 Rescue (BFS+优先队列)

Rescue Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is:

【网络流24题----14】孤岛营救问题

孤岛营救问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 1944年,特种兵麦克接到国防部的命令.要求马上赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形,其南北方向被划分为 N行,东西方向被划分为 M列,于是整个迷宫被划分为 N×M个单元.每个单元的位置可用一个有序数对 (单元的行号,单元的列号)来表示.南北或东西方向相邻的 2个单元之间可能互

HDU 1242 Rescue(BFS)

题目链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is: a