sicily 1005. 无路可逃?
2016-01-09 17:26
197 查看
Description
唐僧被妖怪关在迷宫中。孙悟空好不容易找到一张迷宫地图,并通过一个魔法门来到来到迷宫某个位置。假设迷宫是一个n*m的矩阵,它有两种地形,1表示平地,0表示沼泽,孙悟空只能停留在平地上。孙悟空目前的位置在坐标(sx,sy)处,他可以向上下左右四个方向移动。
请你帮助孙悟空计算一下,迷宫中是否存在一条路从他所在位置(sx,sy)到达唐僧所在位置(tx,ty)?
Input
输入第一行为一个整数t(0< t<=10),表示测试用例个数。
每个测试样例的第1行是2个正整数n (1≤n≤100),m (1≤n≤100),表示迷宫是n*m的矩阵。接下来的n行输入迷宫,每行有m个数字(0或者1),数字之间用一个空格间隔。
接下来的1行是4个整数sx,sy,tx,ty,1≤sx,tx≤n,1≤sy,ty≤m,表示孙悟空所在位置为第sx行第sy列,唐僧所在位置为第tx行第tx列。迷宫左上角编号是(1,1),右下角编号是(n, m)。
数据保证(sx,sy)格和(tx,ty)必定为平地。
Output
每个样例单独输出一行:1表示路径存在,0表示路径不存在。
#include<iostream> #include<queue> #include<memory.h> using namespace std; struct point{ int x; int y; point(int x,int y){ this->x=x; this->y=y; } point(){ } }; bool visited[101][101]; int maze[101][101]; void bfs(int sx,int sy); int main(){ int t; cin>>t; while(t--){ memset(visited,0,sizeof(visited)); memset(maze,0,sizeof(maze)); int n,m,sx,sy,tx,ty; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>maze[i][j]; } cin>>sx>>sy>>tx>>ty; bfs(sx,sy); if(visited[tx][ty]==1){ cout<<1<<endl; } else cout<<0<<endl; } return 0; } int dx[4]={0,1,0,-1}; int dy[4]={1,0,-1,0}; void bfs(int sx,int sy){ queue<point> q; q.push(point(sx,sy)); visited[sx][sy]=true; while(!q.empty()){ point temp,temp_a; temp=q.front(); q.pop(); for(int i=0;i<4;i++ ){ temp_a.x=temp.x+dx[i]; temp_a.y=temp.y+dy[i]; if(!visited[temp_a.x][temp_a.y] && maze[temp_a.x][temp_a.y]==1 &&temp_a.x>=1 && temp_a.y>=1){ visited[temp_a.x][temp_a.y]=true; q.push(temp_a); } } } }
相关文章推荐
- python crc计算器
- 让你不再害怕指针
- linux文件系统剖析
- swift也开源了.
- 前端菜鸡之路——聊天室2.0
- oc之数组反序输出示例
- Android开发实现HttpClient工具类
- 答题游戏项目(1)
- c语言中内存的动态分配与释放(多维动态数组构建)
- xib作为cell的两种初始化方法
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber
- Spring整合Quartz遇到内存泄露问题
- leetcode之Reverse Nodes in k-Group
- 进神经网络的学习方式(译文)----中
- ANDROID内存优化(大汇总——下)
- contentMode 属性,视图,填充样式
- android------基础面试题
- Windows读写注册表的例子
- 小知识
- iOS 进阶 第一天(0323)