知识点:搜索、递推、枚举和暴力
题目大意:
给你一个n行m列的网格,和t个障碍物,起点坐标、终点坐标、障碍物坐标。问有几种方案可以从起点走到终点
解题思路:
1.写一个搜索搜可以走哪些点
2.输出方案数
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,t,ans;
int x,y,x2,y2;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int g[10][10]={0};//判断是否已走过 ,是否为障碍物。
void dfs(int x,int y)
{
if(x==x2&&y==y2)//从起点搜索和从终点开始搜索
{
ans++;//方案数
return;
}
for(int i=0;i<4;i++)
{
int a=x+dx[i];
int b=y+dy[i];
if(a>0&&a<=n&&b>0&&b<=m&&g[a][b]==0)//可以行走
{
g[a][b]=1;//把走过的标记为1
dfs(a,b);//进行搜索
g[a][b]=0; //再把所有的标记为0
}
}
}
int main()
{
cin>>n>>m>>t;//n行,m列,t个障碍物
cin>>x>>y>>x2>>y2;//起点坐标x,y 终点坐标 x2,y2
for(int i=1;i<=t;i++)//t次循环
{
int c,d;
cin>>c>>d;//读入障碍物的坐标
g[c][d]=1;//并标记为1 ,表示不能走
}
g[x][y]=1;//当点标记为1时
dfs(x,y);//进行搜索
cout<<ans<<endl;//输出方案数
return 0;
}
总结
在前面的题目上花了太多时间,只看了题目,还没有来得及思考,还有就是对搜索掌握不太好