dfs
假设走一个迷宫,我们要找从起点到终点的最短位置
所以我们就需要尝试每一种可能,先沿着一条路从起点出发开始
没到一个地点我们就对这个地点标记,然后继续走,直到走不通。
我们就开始返回,并且取消标记
我们用dfs()函数解决这个问题
首先我能想象迷宫是一个坐标
此处我们需要2个参数来解决这个问题,即起点。
我们还需要两个数组,一个用来存图,一个标记走过的路避免重复
#include<stdio.h> int m,n,sx,sy,fx,fy,ans; int a[50][50],v[50][50];//表示地图和对走过的点的标记 //方向数组 int dx[4]={0,1,0,-1}; int dy[4]={1,0,-1,0}; void dfs(int x,int y) { //是否到达终点 if(x==fx&&y==fy) { ans++; return; } //遍历四种走法 for(int k=0;k<=3;k++) { int tx,ty; tx=x+dx[k]; ty=y+dy[k]; //是否越界,是否有障碍物,是否走过 if(a[tx][ty]==0&&v[tx][ty]==0&&tx>=0&&tx<=n&&ty>=0&&ty<=m) { v[tx][ty]=1; dfs(tx,ty); v[tx][ty]=0; } } return; } int main() { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&a[i][j]); } } scanf("%d %d %d %d",&sx,&sy,&fx,&fy); v[sx][sy]=1;//标记起点已走过 dfs(sx,sy); printf("%d",ans); return 0; }