题目描述
给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和
终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫
中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
分析
这题深搜即可。
首先读入时给障碍所在点赋值标记
然后就是一堆叽里呱啦的深搜过程
好吧严肃点
结构如下
{给走过的点赋值标记}
深搜(。。。)
{给这个点取消标记}
就那么简单,然鹅我差点忘记深搜怎么打了
#include <iostream>
using namespace std;
int n,m,sx,sy,ex,ey,t,s;
int a[10][10];
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-1,0};
void init()
{
int i,x,y;
cin>>n>>m>>t;
cin>>sx>>sy>>ex>>ey;
for (i=1;i<=t;i++)
{
cin>>x>>y;
a[x][y]=1;
}
return;
}
void dfs(int x,int y)
{
int i;
if (x==ex&&y==ey)
{
s++;
return;
}
else
for (i=0;i<=3;i++)
if (x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m)
if (a[x+dx[i]][y+dy[i]]!=1)
{
a[x+dx[i]][y+dy[i]]=1;
dfs(x+dx[i],y+dy[i]);
a[x+dx[i]][y+dy[i]]=0;
}
}
int main()
{
init();
a[sx][sy]=1;
dfs(sx,sy);
cout<<s;
return(0);
}