走迷宫
来源:互联网 发布:1080p网络摄像头 编辑:程序博客网 时间:2024/04/30 05:04
描述:
判断是否能从迷宫的入口到达出口
输入:
先输入两个整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。
输出:
若能到达,则输出"Yes",否则输出"No",结果占一行。
输入样例:
3 30 02 20 0 01 1 00 1 0
输出样例:
Yes
#include <iostream>using namespace std;int sx, sy, fx, fy; //起点和终点int row, col; //迷宫的行数和列数int maze[1000][1000]; //迷宫数组int visit[1000][1000]; //是否走过int state = 0; //是否找到int dir[4][2] = {{1,0}, {-1,0}, {0,-1}, {0,1}}; //上下左右四个方向int legal(int x, int y){ //未越界,且可走通, 没有访问过 if(x >= 0 && x < row && y >= 0 && y < col && maze[x][y] == 0 && visit[x][y] == 0) return 1; else return 0;}void dfs(int x, int y){ //找到目标 if(x == fx && y == fy) { state = 1; return; } visit[x][y] = 1; //标记maze[x][y]已访问 for(int i = 0; i < 4; i ++) { int nx = x+dir[i][0]; //新的坐标 int ny = y+dir[i][1]; //cout << "nx = "<<nx << "\tny = "<< ny << endl; if(legal(nx, ny)) //新坐标合法 dfs(nx, ny); }}int main(){ cin >> row >> col; cin >> sx >> sy; cin >> fx >> fy; for(int i = 0; i < row; i++) for(int j = 0; j < col; j++) cin >> maze[i][j]; dfs(sx, sy); if(state == 1) cout << "Yes" << endl; else cout << "No" << endl; return 0;}
0 0
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- iOS学习之网络编程(1)
- Access restriction错误
- OpenCV:Mat元素访问方法、性能、代码复杂度以及安全性分析
- App调试内存泄露之Context篇(下)
- 生产问题1015
- 走迷宫
- JS事件模型
- 详细跨境电商模式分析
- Linux(二)——gdb调试、段错误检查
- Linux内核协议栈(1) 前言
- 响应者链
- [Java] 学习笔记一(String,for循环,多线程,正则表达式,map用法)
- python中多线程编程
- hdu 5626 Clarke and points