P1605迷宫

xiaoxiao2021-02-28  3

题目背景 迷宫 【问题描述】

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和

终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫

中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

输入样例 输出样例

【数据规模】

1≤N,M≤5

题目描述 输入输出格式 输入格式: 【输入】

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点

坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式: 【输出】

给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方

案总数。

输入输出样例 输入样例#1: 2 2 1 1 1 2 2 1 2 输出样例#1: 1

水题,搜索,一点,初始化那一点记得标记

#include <bits/stdc++.h> using namespace std; const int MAXN=10; int sx,sy,fx,fy; int n,m,t; int mapp[MAXN][MAXN]; bool Vis[10][10]; int ans; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; bool check(int x,int y) { if(x<=0||x>n||y<=0||y>m||mapp[x][y]==1||Vis[x][y]==true) return false; return true; } void dfs(int x,int y) { if(x==fx&&y==fy) { ans++; return; } for(int i=0;i<4;i++) { int kx=x+dx[i]; int ky=y+dy[i]; if(check(kx,ky)) { Vis[kx][ky]= true; dfs(kx,ky); Vis[kx][ky]= false; } } } int main() { scanf("%d%d%d",&n,&m,&t); scanf("%d%d%d%d",&sx,&sy,&fx,&fy); int x,y; memset(mapp,0, sizeof(mapp)); memset(Vis, false, sizeof(Vis)); for(int i=0;i<t;i++) { scanf("%d%d",&x,&y); mapp[x][y]=1; } ans=0; mapp[sx][sy]=1; dfs(sx,sy); printf("%d\n",ans); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2650141.html

最新回复(0)