CSU 1259 bfs找最短路

题目大意:

不想介绍,题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1259

bfs求最短路。

这里因为2-9,到达同样的点不计步数,那我们不能每次bfs都遍历一个图找到所有相同的点,所以这里用vector[10],保存对应的2-9的相同的节点

题目本身比较简单,只是考虑的东西有点多,慢慢写就行了

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <iostream>
  4 #include <vector>
  5 #include <queue>
  6 using namespace std;
  7 #define N 105
  8 int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
  9 int dp[N][N],n,visit[N][N];
 10 int mat[N][N];
 11 struct Node{
 12     int x,y;
 13     Node(int x=0,int y=0):x(x),y(y){}
 14     bool operator==(const Node &m)const{
 15         return x == m.x && y == m.y;
 16     }
 17 };
 18 Node st , la;
 19 vector<Node> G[10];
 20 queue<Node> q;
 21 
 22 bool ok(int x,int y){
 23     if(x>=1 && x<=n && y>=1 && y<=n && mat[x][y] != 1)
 24         return true;
 25     return false;
 26 }
 27 
 28 void bfs()
 29 {
 30     q.push(st);
 31     visit[st.x][st.y] = 1;
 32     dp[st.x][st.y] = 0;
 33     while(!q.empty()){
 34         Node u = q.front();
 35        //cout<<"test: "<<u.x<<"  "<<u.y<<"  "<<dp[x][y]<<endl;
 36         q.pop();
 37         if(u == la) continue;
 38         if(mat[u.x][u.y] == 0){
 39             for(int i=0;i<4;i++){
 40                 int xx = u.x+dir[i][0];
 41                 int yy = u.y+dir[i][1];
 42                 if(ok(xx,yy)){
 43                     if(dp[xx][yy] > dp[u.x][u.y] + 1){
 44                         dp[xx][yy] = dp[u.x][u.y] + 1;
 45                         if(!visit[xx][yy]){
 46                             visit[xx][yy]=1;
 47                             q.push(Node(xx,yy));
 48                         }
 49                     }
 50                 }
 51             }
 52         }
 53         else{
 54             int t = mat[u.x][u.y];
 55             for(int i=0;i<(int)G[t].size();i++){
 56                 Node m = G[t][i];
 57                 if(m == u) continue;
 58                 if(dp[m.x][m.y] > dp[u.x][u.y])
 59                 {
 60                     dp[m.x][m.y] = dp[u.x][u.y];
 61                     if(!visit[m.x][m.y]){
 62                         visit[m.x][m.y] = 1;
 63                         q.push(m);
 64                     }
 65                 }
 66             }
 67             for(int i=0;i<4;i++){
 68                 int xx = u.x+dir[i][0];
 69                 int yy = u.y+dir[i][1];
 70                 if(ok(xx,yy)){
 71                     if(dp[xx][yy] > dp[u.x][u.y] + 1){
 72                         dp[xx][yy] = dp[u.x][u.y] + 1;
 73                         if(!visit[xx][yy]){
 74                             visit[xx][yy]=1;
 75                             q.push(Node(xx,yy));
 76                         }
 77                     }
 78                 }
 79             }
 80         }
 81     }
 82 }
 83 
 84 int main()
 85 {
 86     freopen("test.in","rb",stdin);
 87     char a;
 88     while(~scanf("%d",&n)){
 89         //init
 90         for(int i=1;i<10;i++)G[i].clear();
 91         memset(dp,0x3f,sizeof(dp));
 92         memset(visit,0,sizeof(visit));
 93 
 94         for(int i=1;i<=n;i++){
 95             for(int j=1;j<=n;j++){
 96                 cin>>a;
 97                 if(a == 'S')
 98                 {
 99                     mat[i][j] = 0;
100                     st = Node(i,j);
101                 }
102                 else if(a == 'E')
103                 {
104                     mat[i][j] = 0;
105                     la = Node(i,j);
106                 }
107                 else if(a == '0' || a == '1'){
108                     mat[i][j] = 0 + a - '0';
109                 }
110                 else{
111                     mat[i][j] = 0 + a - '0';
112                     G[mat[i][j]].push_back(Node(i,j));
113                 }
114             }
115         }
116 
117         bfs();
118         if(dp[la.x][la.y] == 0x3f3f3f3f){
119             puts("Oh No!");
120         }
121         else{
122             printf("%d\n",dp[la.x][la.y]);
123         }
124     }
125     return 0;
126 }

 

转载于:https://www.cnblogs.com/CSU3901130321/p/4046473.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何改善虚幻引擎中的游戏线程CPU性能表现

您游戏中的帧频率是不是太低&#xff1f; 您了解为什么会发生这种现象吗&#xff1f; 这是不是由于您同时生成了太多敌人&#xff1f;还是由于某个特定敌人过于消耗系统资源&#xff1f; 是由于您设置了过多的视觉特效&#xff0c;还是由于您所设计的战斗系统所造成的&#xff…

mysql timeout

&#xff08;待更新整理&#xff09; 因为最近遇到一些超时的问题&#xff0c;正好就把所有的timeout参数都理一遍&#xff0c;首先数据库里查一下看有哪些超时&#xff1a; rootlocalhost : test 12:55:50> show global variables like "%timeout%"; -----------…

UE 光影参数

平行光的光影效果参数 天光的光影效果参数 让材质不反射光&#xff0c;也就是材质本身的颜色不起作用&#xff0c;只能使用自发光 去掉模型光影效果

《BI项目笔记》多维数据集中度量值设计时的聚合函数

Microsoft SQL Server Analysis Services 提供了几种函数&#xff0c;用来针对包含在度量值组中的维度聚合度量值。默认情况下&#xff0c;度量值按每个维度进行求和。但是&#xff0c;通过 AggregateFunction 属性&#xff0c;您可以修改此行为。聚合函数的累加性可确定度量值…

零基础Unreal Engine 4(UE4)图文笔记之粒子系统

1.我们需要创建两个东西&#xff0c;一个材质一个粒子。先打开材质&#xff0c;在制作粒子之前&#xff0c;我们首先需要自己创建一个粒子效果能用的材质 在材质编辑器中&#xff0c;修改细节中Blend Mode类型为Translucent&#xff0c;Shading Model 为Unit&#xff0c;这一步…

string.Format 指定字符串宽度

语法: { index[,alignment][:formatString]} index,为索引号,不用多说.alignment,是一个带符号的整数,绝对值的大小表示字段的宽度.formatString,格式字符串组件.需要注意的是,alignment对于字符串是不起作用的.转载于:https://www.cnblogs.com/listened/p/4052078.html

[UE4]性能优化指南(程序向)

零散记录 GPUProfile来统计性能消耗的时候&#xff0c;在editor模式下不是很准&#xff0c;因为编辑器的消耗也算进去了&#xff0c;如果要用&#xff0c;最好以Game模式来查看。UE4不支持640X480的分辨率&#xff0c;如果在这个分辨率下运行程序&#xff0c;会导致程序崩溃&a…

武汉大学2013年数学分析考研试题参考解答

来源 [尊重原有作者劳动成果] 一&#xff1a; 1&#xff1a;解&#xff1a;\[\because \underset{x\to 0}{\mathop{\lim }}\,\ln (1x)x\] \[\therefore \underset{x\to 0}{\mathop{\lim }}\,\frac{\sqrt[n]{1x}-1}{\ln (1x)}\underset{x\to 0}{\mathop{\lim }}\,\frac{\sqrt[n]…

[UE4]性能优化指南(美术向)

参考自官方文档&#xff1a; Performance Guidelines for Artists and Designershttps://docs.unrealengine.com/en-us/Engine/Performance/Guidelines 但是官方文档写的太粗燥&#xff0c;对UE4没有一定了解&#xff0c;很难理解文档的意图。这里我在官方文档的基础上&#x…

HTTP协议中返回代码302的情况

http协议中&#xff0c;返回状态码302表示重定向。 这样的情况下&#xff0c;server返回的头部信息中会包括一个 Location 字段&#xff0c;内容是重定向到的url 转载于:https://www.cnblogs.com/mengfanrong/p/4059628.html

UE4 Fix – “Lighting build failed. Swarm failed to kick off.”

Hello! Have you encountered the “Swarm Failed to Kick Off” error on an Unreal Engine project when trying to build a level? I did, after we switched to a custom engine build. Since most of the resources on the web were not helpful. Here’s a really simpl…

贪吃蛇 WPF

贪吃蛇 WPF using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Wind…

Linux修改开机启动logo

默认开机LOGO会在液晶屏的左上脚显示一只小企鹅&#xff0c;分辨率为80*80&#xff0c;具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像&#xff0c;程序会根据这幅图像生成logo_linux_clut224.c和 logo_linux_clut224.o两个文件&#xff0c;最终将小企…

sqlite3使用简介(内含解决sqlite内存的方法)

一&#xff0e;使用流程 要使用sqlite&#xff0c;需要从sqlite官网下载到三个文件&#xff0c;分别为sqlite3.lib&#xff0c;sqlite3.dll&#xff0c;sqlite3.h&#xff0c;然后再在自己的工程中配置好头文件和库文件&#xff0c;同时将dll文件放到当前目录下&#xff0c;就完…

动态更新纹理

1. 创建C类继承自AStaticMeshActor 2. 定义用于渲染队列的数据结构 struct FUpdateTextureData {FTexture2DResource* Texture2DResource;FUpdateTextureRegion2D* UpdateTextureRegion;uint8* DynamicColors;int32 w; }; 3. 增加成员变量 UMaterialInstanceDynamic* mDynam…

阿旺wifi智能系统源码

系统简介本系统适合DD-WRT固件路由器和OoenWrt固件路由器或者任何带有WIFIDOG插件的路由器。系统基于ThinkPHP框架PHPMySQL的技术开发。系统主要功能: 1.无密码认证&#xff1a;只点击按钮或强制看广告1.验证码认证&#xff1a;招待券认证、一次性账号、指定时间限制3.用户名密…

动态更新纹理闪烁问题

1. 模型旋转角度尽量取整数&#xff0c;保证线条不会出现锯齿 2. 修改反锯齿模型为FXAA方式&#xff0c;默认的TemporalAA方式会闪烁 3. 动态更新的纹理尺寸一般都不会是2的N次方&#xff0c;比如401X518。 解决方案是 动态更新一张1024x1024的贴图的其中401X518&#xff0c;…

warning C4828问题的处理

warning C4828: 文件包含在偏移 0x215 处开始的字符&#xff0c;该字符在当前源字符集中无效(代码页 65001)。 (编译源文件 XXXXXXcpp) 这提示是由于字符集的问题导致&#xff0c;解决方案如下 点击VS2017 文件->另存为->编码保存->65001 然后重新编译,警告问题解决…

OC中description、 SEL、类本质、self和super用法

一&#xff1a;description方法 description有对象方法和类方法两种&#xff0c;&#xff08;是NSObject类的方法&#xff09;1&#xff0c;-description&#xff08;对象方法&#xff09; 使用NSLog和%输出某个对象时&#xff0c;会调用对象的description方法&#xff0c;并拿…

修改场景默认pawn的方法

playstart方法 1. 放置playstart到场景中 2. 修改world settings的GameMode 直接放置pawn方法 1. 放置pawn到场景中 2. 修改world settings的GameMode 3. 修改pawn的Auto Possess Player为Player 0