走迷宫

来源:互联网 发布: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