全部评论 1

  • #include<bits/stdc++.h>
    using namespace std;
    bool vis[9][9];//定义vis数组,vis[i][j]标记(i,j)是否被访问过
    bool MAP[9][9];//定义MAP数组,MAP[i][j]=false表示不是障碍物 MAP[i][j]=true是障碍物
    int n, m, t, ans, sx, sy, fx, fy;//定义n,m,t,ans,sx,sy,ex,ey
    int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };//定义方向数组
    void dfs(int x, int y) {//定义函数dfs(x,y)表示当前在(x,y)位置
    if (x == fx && y == fy) { //判断是否xfx且yfy,判断是否到达终点
    ans++;//路径数量+1
    return; //返回
    }

    for (int i = 0; i < 4; i++) {//for循环遍历方向数组
    	int nx = x + dir[i][0], ny = y + dir[i][1];//求出邻居位置(nx,ny)
    	if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && MAP[nx][ny] == false) {//判断邻居是否在地图内且没有被访问过且不是障碍物,如果成立就走过去
            vis[nx][ny] = 1;//vis[nx][ny]=1,标记(nx,ny)访问过
    		dfs(nx, ny);//去(nx,ny)的位置(从(nx,ny)开始搜索) 
            vis[nx][ny] = 0;//vis[nx][ny]=0,(nx,ny)位置所有的方向都尝试过了, 回退,将(nx,ny)位置标记为未访问过 
    	}
    }
    

    }
    int main() {
    freopen("shuliang.in", "r", stdin);
    freopen("shuliang.out", "w", stdout);
    cin >> n >> m >> t;//输入n,m,t
    cin >> sx >> sy >> fx >> fy;//输入sx,sy,fx,fy
    for (int i = 0; i < t; i++) {//for循环输入t个障碍物的位置并标记
    int x, y;
    cin >> x >> y;
    MAP[x][y] =1;
    }
    vis[sx][sy] = 1;
    dfs(sx,sy); //调用dfs(sx,sy),从(sx,sy)位置开始搜索
    cout << ans;//输出答案
    fclose(stdin);
    fclose(stdout);
    return 0;
    }

    5天前 来自 上海

    0

热门讨论