Luogu P1764 离开中山路

Posted tony102

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu P1764 离开中山路相关的知识,希望对你有一定的参考价值。

Luogu 题目链接:https://www.luogu.org/problemnew/show/P1746

很典型的BFS的题目,按路径搜索即可。

思路:

没走过的就走,走完了标记,防止产生节点过多,一定会爆(来自小蒟蒻的温馨提醒)

然后注意输入的格式,地图数据之间没有空格,因此不能用int数组,用char数组存吧,要不你也依次读入一个字符,转成int数组。

同时注意边界值吧

 

代码如下(小蒟蒻采用了一个只有十分其他全部RE的版本,因为小蒟蒻非常重视学术诚信):

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int n,ans;
 5 int a1, a2, b1, b2;  //起始位置和重点位置
 6 char a[1001][1001];  //存图
 7 int q[1000001][3];  //手打队列
 8 int dx[4] = { -1,1,0,0 };
 9 int dy[4] = { 0,0,-1,1 };  //方向增量
10 bool vis[1001][1001];
11 inline void bfs()
12 {
13     int tx, ty;
14     int head = 0, tail = 1;  //头尾指针
15     q[1][0] = a1, q[1][1] = a2, q[1][2] = 0;  //从a1,a2开始走,q[][0]代表行,q[][1]代表列,q[][2]代表已经用过的步数
16     while (head < tail)
17     {
18         ++head;
19         for (register int i = 0; i < 4; i++) //向四个方向扩展
20         {
21             tx = q[head][0] + dx[i];  
22             ty = q[head][1] + dy[i];
23             if (tx == b1 && ty == b2)  //如果已经到达了终点
24             {
25                 ans = q[head][2] + 1;  //因为到达终点还要再走一步,所以+1
26                 return;  //停止搜索
27             }
28             if (tx<1 || tx>n || ty<1 || ty>n || vis[tx][ty] || a[tx][ty]==1)  //判断tx,ty是否越界,判重,和可不可以走
29                 continue;
30             tail++;  //都没有问题的话就入队
31             q[tail][0] = tx;
32             q[tail][1] = ty;
33             q[tail][2] = q[head][2] + 1;
34             vis[tx][ty] ^ 1;  //标记
35         }
36     }
37 }
38 int main()
39 {
40     char c;
41     scanf("%d", &n);
42     for (register int i = 1; i <= n; i++)
43         for (register int j = 1; j <= n; j++)
44             cin>>a[i][j];
45     scanf("%d %d %d %d", &a1, &a2, &b1, &b2);  //读入,以防scanf函数读char类型出问题(主要是小蒟蒻技术辣鸡)
46     bfs();
47     printf("%d", ans);  //打印答案
48     return 0;
49 } 

 

不过话说回来,这篇代码是在Microsoft visual studio 2017上写的,因为支持自动代码风格,所以有点丑,各位dalao见谅

 

以上是关于Luogu P1764 离开中山路的主要内容,如果未能解决你的问题,请参考以下文章

bzoj [中山市选2009]谁能赢呢?

蓝桥杯BFS从此搞懂搜索题的套路! | 入门必看

android - 离开应用程序时保持谷歌地图片段在位置上放大

[dfs][模拟网络流] Luogu P4189 星际旅行

Luogu P4316 绿豆蛙的归宿

luogu P3942 将军令