nyoj 999
nyoj 999: 点击打开题目链接
题目思路,处理一下地图,把 D E 能看到的地方标记一下。然后就是暴力广搜一下。标记状态,因为同样在同一个点,但是你刚出发到达那点和找到D之后到达相同的点和找到E之后到达相同的点,这3中状态是不同的。用vis[x][y][3]
来标记状态,标记状态知道这题就AC了。
还有另外的思路就是把它们一个一个搜,S-->D-->E S-->D-->E S-->D,E; 分别广搜,取min即可。
下面是第一种,标记状态的方法。另外一种就不写了。
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<vector>
- #include<string>
- #include<string.h>
- #include<queue>
- using namespace std;
- typedef long long int LL;
- typedef short int sint;
- const int INF=~(1<<31);
- const int MM=105;
- int n,m,times;
- sint dir[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
- char maps[MM][MM];
- bool vis[MM][MM][3];
- struct node
- {
- short int x,y,step,now;
- };
- bool is_out(sint x,sint y)
- {
- if(x>=0&&x<n&&y>=0&&y<m) return true;
- return false;
- }
- int bfs(int sx,int sy)
- {
- node first,second;
- if(maps[sx][sy]=='e') first.now=2;
- else if(maps[sx][sy]=='d') first.now=1;
- else if(maps[sx][sy]=='f') first.now=3;
- else first.now=0;
- queue<node>q;
- first.step=0,first.x=(sint)sx,first.y=(sint)sy;
- q.push(first);
- while(!q.empty())
- {
- first=q.front();
- q.pop();
- // printf("step=%d x=%d y=%d now=%d\n",(int)first.step,first.x,first.y,first.now);
- if(first.now==3) return first.step;
- if(first.step>times) return -1;
- for(int i=0; i<4; i++)
- {
- sint x=first.x+dir[i][0],y=first.y+dir[i][1];
- if(is_out(x,y)&&vis[x][y][first.now]==0&&maps[x][y]!='X')
- {
- int now=first.now;
- second.now=now;
- vis[x][y][first.now]=true;
- if(maps[x][y]=='f') second.now=3;
- if(maps[x][y]=='d'&&now==2) second.now=3;
- else if(maps[x][y]=='d') second.now=1;
- if(maps[x][y]=='e'&&now==1) second.now=3;
- else if(maps[x][y]=='e') second.now=2;
- if(second.now!=3) vis[x][y][second.now]=true;
- second.step=first.step+1,second.x=x,second.y=y;
- q.push(second);
- }
- }
- }
- return -1;
- }
- void set_map(int dx,int dy,int ex,int ey)
- {
- int x,y;
- for(x=dx+1,y=dy; is_out(x,y)&&maps[x][y]=='.'; x++) maps[x][y]='d';
- for(x=dx-1,y=dy; is_out(x,y)&&maps[x][y]=='.'; x--) maps[x][y]='d';
- for(x=dx,y=dy+1; is_out(x,y)&&maps[x][y]=='.'; y++) maps[x][y]='d';
- for(x=dx,y=dy-1; is_out(x,y)&&maps[x][y]=='.'; y--) maps[x][y]='d';
- for(x=ex+1,y=ey; is_out(x,y)&&(maps[x][y]=='.'||maps[x][y]=='d'); x++)
- if(maps[x][y]=='d') maps[x][y]='f';
- else maps[x][y]='e';
- for(x=ex-1,y=ey; is_out(x,y)&&(maps[x][y]=='.'||maps[x][y]=='d'); x--)
- if(maps[x][y]=='d') maps[x][y]='f';
- else maps[x][y]='e';
- for(x=ex,y=ey+1; is_out(x,y)&&(maps[x][y]=='.'||maps[x][y]=='d'); y++)
- if(maps[x][y]=='d') maps[x][y]='f';
- else maps[x][y]='e';
- for(x=ex,y=ey-1; is_out(x,y)&&(maps[x][y]=='.'||maps[x][y]=='d'); y--)
- if(maps[x][y]=='d') maps[x][y]='f';
- else maps[x][y]='e';
- }
- void p_m()
- {
- int i,j;
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- printf("%c",maps[i][j]);
- printf("\n");
- }
- }
- int main(void)
- {
- int cases=0;
- while(cin>>n>>m>>times)
- {
- int i,j,sx,sy,dx,dy,ex,ey;
- memset(maps,0,sizeof(maps));
- memset(vis,0,sizeof(vis));
- for(i=0; i<n; i++)
- {
- cin>>maps[i];
- for(j=0; j<m; j++)
- {
- if(maps[i][j]=='S') maps[i][j]='.',sx=i,sy=j;
- if(maps[i][j]=='D') dx=i,dy=j;
- if(maps[i][j]=='E') ex=i,ey=j;
- }
- }
- set_map(dx,dy,ex,ey);
- maps[dx][dy]='X';
- maps[ex][ey]='X';
- printf("Case %d:\n%d\n",++cases,bfs(sx,sy));
- }
- return 0;
- }
nyoj 999的更多相关文章
- nyoj 999——师傅又被妖怪抓走了——————【双广搜】
师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟 ...
- nyoj 163 Phone List(动态字典树<trie>) poj Phone List (静态字典树<trie>)
Phone List 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Given a list of phone numbers, determine if it i ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed.
转:http://www.wangzhengdong.com/blog/error-domainnsurlerrordomain-code-999-the-operation-couldnt-be-c ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- NSURLErrorDomain -999 "Canceled" 错误探究
完整错误描述为 Error Domain=NSURLErrorDomain Code=-999 "Canceled/已取消" 这个错误一般用来描述某个网络请求在还未被发出时就被意外 ...
- NYOJ 99单词拼接(有向图的欧拉(回)路)
/* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...
- 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print
package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...
随机推荐
- Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行
Ubuntu默认没有安装screen,需要手动安装. 安装命令: sudo apt-get install screen 简单的操作方法: 直接输入命令 screen 进入screen子界面,此时pu ...
- 新建JRapid项目(idea创建maven多模块项目)
1.第一步,新建项目(Create New Project) 2.parent项目,不勾选“Crate from archetype”,直接单击“Next”. 3.groupid填写com.codin ...
- 加密算法和MD5等散列算法的区别(转)
本文转自http://www.cnblogs.com/eternalwt/archive/2013/03/21/2973807.html 感谢作者 1.在软件开发的用户注册功能中常出现MD5加密这个概 ...
- 【flyway】Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' def
报错如下: "2018-03-20 12:58:09.585 WARN 18026 — [ restartedMain] ConfigServletWebServerApplicationC ...
- maven删除不必要的依赖;优化pom依赖研究
mvn dependency:copy-dependencies -DoutputDirectory=/home/admin/git/oceanus/test 会把所有依赖的插件版本都拷贝进去,而不是 ...
- 改动C:\WINDOWS\system32\drivers\etc\hosts 文件有什么作用
host是一个没有扩展名的系统文件,能够用记事本等工具打开,其作用就是将一些常常使用的网址域名与其相应的IP地址建立一个关联"数据库".当用户在浏览器中输入一个须要登录的网址时,系 ...
- 向C#的选项卡中添加自定义窗体
一.自定义窗体的搭建 这个比较简单,添加一个WinForm窗体就行了,设置一个名字EditPanel,然后在窗体上画需要的控件. 二.将自定义窗体添加到选项卡 // 新建窗体加入到选项卡中 EditP ...
- sublime 高速打开跳转至关联文件
在下一枚web前端,近期在用sublime text2编辑器写前端.因为页面较多,项目较大,所以难免出现非常多引用文件和一些js的teample模板. 问题:在Sublime Text编写代码过程中要 ...
- HDU 1060 Leftmost Digit (数学/大数)
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 获取Bootstrap-Table的所有内容,修改行内容
var allTableData = $tableLeft.bootstrapTable('getData');//获取表格的所有内容行 var flag = false; for( i=0;i< ...