codevs 3344 迷宫
小刚在迷宫内,他需要从A点出发,按顺序经过B,C,D……,到达最后一个点,再回到A点。迷宫内有些障碍,问至少走几步。
第一行有三个数n,m表示迷宫有n行,m列。
第2行到第n+1行,每行m个字符,可能是’A’..’Z’,’2’,’0’ 其中,2表示障碍,0表示可以走。’A’..’Z’也可以走。
至少走几步可以按规定走完,如果不行,输出“Impossible”
5 5
A002B
022C0
000D0
00222
0000E
26
0%的数据满足:1<=n<=10 1<=m<=10 字母为“A”..“B”。
30%的数据满足:1<=n<=10 1<=m<=10 字母为“A”..“G”。
50%的数据满足:1<=n<=10 1<=m<=10 字母为“A”..“Z”。
10%的数据满足:1<=n<=100 1<=m<=100 字母为“A”..“B”。
30%的数据满足:1<=n<=100 1<=m<=100 字母为“A”..“G”。
100%的数据满足:1<=n<=100 1<=m<=100 字母为“A”..“Z”。
bfs
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; struct node
{
int x,y;
char ch;
}zm[];
int fx[]={,-,,},fy[]={,,-,};
int h,tot,n,m,i,j;
bool vis[][];
char atlas[][];
bool cmp(node a,node b)
{
return int(a.ch)<int(b.ch);
}
int dfs(int sx,int sy,int ox,int oy)
{
int f[][],head=,tail=;
f[tail][]=sx;
f[tail][]=sy;
f[tail][]=;
vis[sx][sy]=;
do
{
head++;
int x=f[head][],y=f[head][];
for(int k=;k<;++k)
{
int lx=x+fx[k],ly=y+fy[k];
if(lx>=&&lx<n&&ly>=&&ly<m&&!vis[lx][ly]&&atlas[lx][ly]!='')
{
f[++tail][]=lx;
f[tail][]=ly;
f[tail][]=f[head][]+;
vis[lx][ly]=;
if(lx==ox&&ly==oy)
return f[head][];
}
}
}while(head<=tail);
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(i=;i<n;++i)
{
for(j=;j<m;++j)
{
cin>>atlas[i][j];
if(atlas[i][j]>='A'&&atlas[i][j]<='Z')
{
zm[tot].x=i;
zm[tot].y=j;
zm[tot].ch=atlas[i][j];
tot++;
}
}
}
sort(zm,zm+tot,cmp);
for(i=;i<tot;++i)
{
if(i<tot-)
{
memset(vis,,sizeof(vis));
int k=dfs(zm[i].x,zm[i].y,zm[i+].x,zm[i+].y);
if(k)
h+=k;
else
{
printf("Impossible");
return ;
}
}
else
{
memset(vis,,sizeof(vis));
int k=dfs(zm[i].x,zm[i].y,zm[].x,zm[].y);
if(k)
h+=k;
else
{
printf("Impossible");
return ;
}
}
}
printf("%d",h);
return ;
}
codevs 3344 迷宫的更多相关文章
- codevs——3344 迷宫
3344 迷宫 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小刚在迷宫内,他需要从A点出发,按顺序经过B, ...
- codevs 1215 迷宫
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n ...
- BFS简单题套路_Codevs 1215 迷宫
BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...
- Codevs 1337 银行里的迷宫
1337 银行里的迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 传送门 题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开 ...
- Codevs 2855 游乐园的迷宫
2855 游乐园的迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 迷宫可是每个游乐园必不可少的项目,菜菜当然是要尝试一下啦. ...
- codevs——T1337 银行里的迷宫
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开宴会). ...
- Codevs 1629 01迷宫
1629 01迷宫 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可 ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- codevs 2822 爱在心中
codevs 2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同, ...
随机推荐
- linq Foreach
lst.ForEach(item => { CbxDF1VersionItemSource.Add(item); });
- HDOj-1425
sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 红帽系统制作yum本地源
1 首先得吐槽吐槽,机房冷就算了,不能用手机(哈哈你懂的),没有站的位置,显示屏看不清楚.就这样开始制作yum本地源. 2 记下注意得两点,以防以后会忘记 a:可能是因为红帽系统,加上是实用光盘挂载的 ...
- codeforces 813C The Tag Game 树+dfs追击问题
C. The Tag Gametime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutpu ...
- supervisor uwsgi配置文件
; ================================ ; uwsgi supervisor ; ================================ [program:uw ...
- jquery冲突的关键字nodeName、nodeValue和nodeType!
原文:http://blog.csdn.net/hdfyq/article/details/52805836 [缘由]在工作流数据库设计的时候, 都节点管理的功能. 结果有2个字段为 NODE_ ...
- 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!! 01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...
- CodeForces691C 【模拟】
这一题的模拟只要注意前后导零就好了... 感受就是... 如果是比赛中模拟题打好..要盯着注意点,测试不同的情况下的注意点..起码要针对性测试10分钟.. 还是蛮简单的,但是自己打烦了,应该,队友代码 ...
- hdu3949XOR(线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 题目大意:求一堆数字能异或出的第$k$大的数是多少 线性基求第k大好珂怕…… 据大佬们说就是把$k$给二进制拆分,如果$k$的第$i$位为1,那么$ ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie路径问题
操作Cookie时,需要注意路径问题: 设置操作:任何路径都可以设置Cookie,但是有时我们也是用设置进行替换Cookie和删除Cookie(maxAge=0)! 替换:只能由完全相同的路径来操作! ...