CSU 1259 跳跳
来源:互联网 发布:win10系统网络感叹号 编辑:程序博客网 时间:2024/09/21 09:02
1259: 跳跳
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 354 Solved: 92
[Submit][Status][Web Board]
Description
一个每块地板标记着0~9某个数字的迷宫,其中标记1的地板不可以走,标记2~9的地板可以不花时间地跳到任意相同数字的位置,也可以和标记0的地板一样向前后左右任意方向花1个单位时间移动1的距离。给出起点和终点,求起点到终点的最短时间。
Input
每组数据第一行一个n,表示尺寸,2 <= n <= 100。
接下来n行每行n个0~9的字符,或S表示起点,E表示终点,S和E的运动规则与0相同。整个地图只有一个S和一个E。
Output
每组数据输出一个数,占一行,表示起点到终点可以花费的最短时间。
如果无法到达重点,输出"Oh No!"
Sample Input
50S100001310030000000003E03S1201010E
Sample Output
4Oh No!
HINT
汉字题意 我喜欢
AC 代码
#include <iostream>#include <stdio.h>#include <queue>#include <string.h>using namespace std;int a[110][110],vis[110][110], pace[110][110],n;int m[4][2]= {0,1,1,0,0,-1,-1,0};int seak(int x,int y){ if(x>=0&&x<n&&vis[x][y]==0&&a[x][y]!=1&&y>=0&&y<n) //判断条件 return 1; return 0;}int bfs(int x1,int y1,int x2,int y2){ int c,l,r; queue<int> Q,Q1,Q2; Q.push(a[x1][y1]); //记录该点 Q1.push(x1); //记录该点的X坐标 Q2.push(y1); //Y坐标 vis[x1][y1]=1; while(!Q.empty()) { c=Q.front(); Q.pop(); x1=Q1.front(); Q1.pop(); y1=Q2.front(); Q2.pop(); if(x1==x2&&y1==y2) return pace[x1][y1]; for(int i=0; i<4; i++) { l=x1+m[i][0],r=y1+m[i][1]; if(seak(l,r)) { Q.push(a[l][r]); Q1.push(l); Q2.push(r); vis[l][r]=1; pace[l][r]=pace[x1][y1]+1; if(a[l][r]>=2&&a[l][r]<=9) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) { if(a[i][j]==a[l][r]&&vis[i][j]==0) { Q.push(c); Q1.push(i); Q2.push(j); vis[i][j]=1; pace[i][j]=pace[l][r]; } } } } } } return -1;}int main(){ char c; int i,j,x1,y1,x2,y2,ans; while(cin >> n) { getchar(); memset(vis,0,sizeof(vis)); memset(pace,0,sizeof(pace)); memset(a,0,sizeof(a)); for(i=0; i<n; i++) { for(j=0; j<n; j++) { cin >> c; if(c=='S') { x1=i,y1=j; a[i][j]=0; } else if(c=='E') { x2=i,y2=j; a[i][j]=0; } else a[i][j]= c-48; } getchar(); } ans=bfs(x1,y1,x2,y2); if(ans==-1) cout << "Oh No!"<<endl; else cout << ans << endl; } return 0;}
0 0
- CSU 1259 跳跳 (bfs)
- CSU 1259 跳跳
- coj 1259: 跳跳
- 跳跳 (BFS) CUS 1259
- 跳跳跳!!
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- iOS_GCD_讲解一_基本概念和Dispatch Queue
- JQuery UI Layout
- 题目1510:替换空格
- uva 10177(数学)
- No.08 Xcode(5.1.x) 使用FFmpeg
- CSU 1259 跳跳
- 同步/异步与阻塞/非阻塞的区别
- *4-0. 求符合给定条件的整数集(15)
- 关于Set
- 杭电1232畅通工程
- 使用异步 I/O 大大提高应用程序的性能
- eclipse null 校验问题
- 利用 Console 来学习、调试JavaScript
- Socket异步阻塞进行接收数据