题目背景
迷宫 【问题描述】 给定一个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
————————————————————————————————————————————————————————
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #include<cmath> 6 #include<algorithm> 7 #include<cstdlib> 8 using namespace std; 9 int n,m,t,sx,sy,fx,fy,t1,t2,tot=0,change[5][3]={{0,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; 10 bool ditu[6][6]={false}; 11 int read(){ 12 int x=0,f=1;char ch=getchar(); 13 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} 14 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 15 return x*f; 16 } 17 void dfs(int x,int y) 18 { 19 if (x>=1 && y>=1 && x<=m && y<=n && ditu[x][y]==false) 20 { 21 if (x==fx && y==fy) 22 { 23 tot++; 24 return ; 25 } 26 for (int i=1;i<=4;i++) 27 { 28 ditu[x][y]=true; 29 dfs(x+change[i][1],y+change[i][2]); 30 ditu[x][y]=false; 31 } 32 } 33 } 34 int main() 35 { 36 n=read();m=read();t=read(); sx=read(); sy=read(); fx=read(); fy=read(); 37 for (int i=1;i<=t;i++) 38 { 39 cin>>t1>>t2; 40 ditu[t1][t2]=true; 41 } 42 dfs(sx,sy); 43 cout<<tot; 44 return 0; 45 }
时间: 2024-10-12 22:42:48