题目背景
迷宫 【问题描述】
给定一个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: 1AC代码
注意要对起点也进行标记,否则只能拿到70分 不对起点进行标记的被卡的数据:
2 2 01 1 1 2
#include#define ll long long#define ms(a,b) memset(a,b,sizeof(a))#define INF 0x7f7f7f7fconst int maxn=1e6+10;using namespace std;int mp[10][10];int vis[100][100];int dis[4][2]={ 1,0,-1,0,0,1,0,-1};int n,m,t;int ans;void dfs(int x,int y,int fx,int fy){ vis[x][y]=1; if(x==fx&&y==fy) ans++; for(int i=0;i<4;i++) { int dx=x+dis[i][0]; int dy=y+dis[i][1]; if(!vis[dx][dy]&&!mp[dx][dy]&&dx<=n&&dx>0&&dy<=m&&dy>0) { dfs(dx,dy,fx,fy); vis[dx][dy]=0; } }}int main(){ ios::sync_with_stdio(false); cin>>n>>m>>t; int sx,sy,fx,fy; cin>>sx>>sy>>fx>>fy; int zx,zy; for(int i=0;i >zx>>zy; mp[zx][zy]=1; } dfs(sx,sy,fx,fy); cout< <