判断迷宫有多少路径 (dfs)

 
#include<stdlib.h>
#include<stdio.h>

int map[6][6];//地图
int temp[6][6];//标记
int N,M,T,sx,sy,fx,fy;//行,列,障碍数目,起始位置,结束位置
int sum=0;//路线的个数
int dx[4]={0,1,0,-1};//移动的四个方向
int dy[4]={1,0,-1,0};

int check(int x,int y){
    if(x>=1&&x<=N&&y>=1&&y<=M)return 1;
    else return 0;
}//检查是否出界

void dfs(int x,int y){
    if(x==fx&&y==fy){
        sum++;
        return;
    }
    else{
        for(int i=0;i<4;i++){
            int xx=x+dx[i],yy=y+dy[i];
            if(check(xx,yy)&&temp[xx][yy]&&map[xx][yy]){
                temp[x][y]=0;
                dfs(xx,yy);
                temp[x][y]=1;//回溯
            }
        }
    }
}

int main(){
    scanf("%d%d%d",&N,&M,&T);
    scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
    for(int i=0;i<=N;i++){
        for(int j=0;j<=M;j++){
            temp[i][j]=1;
            map[i][j]=1;
        }
    }
    //初始化完成
    for(int i=0;i<T;i++){
        int a,b;
        scanf("%d%d",&a,&b);
        map[a][b]=0;
    }
    //障碍物输入完成
    dfs(sx,sy);
    printf("%d",sum);
}
int search(int t)
{
    if(满足输出条件)
    {
        输出解;
    }
    else
    {
        for(int i=1;i<=尝试方法数;i++)
            if(满足进一步搜索条件)
            {
                为进一步搜索所需要的状态打上标记;
                search(t+1);
                恢复到打标记前的状态;//也就是说的{回溯一步}
            }
    }
}

题目链接
 

猜你喜欢

转载自blog.csdn.net/leo_10/article/details/80624484