啊哈算法之DFS

  • Post author:
  • Post category:其他


#include <stdio.h>

#include <stdlib.h>

void dfs(int x,int y,int steo);

int n,m;//迷宫有n行m列

int p,q;//p,q为重点坐标

int min=9999;

int a[50][50],book[50][50];

int main()

{


int i,j;//循环变量

int startx,starty;//起点坐标

printf(“请输入迷宫行数n和列数m\n”);

scanf(“%d %d”,&n,&m);

printf(“请输入迷宫\n”);

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

{


scanf(“%d”,&a[i][j]);

getchar();

}

printf(“请输入起点,终点坐标\n”);

scanf(“%d %d %d %d”,&startx,&starty,&p,&q);

book[startx][starty]=1;//从起点开始搜索

dfs(startx,starty,0);

printf(“最小步数为\n”);

return 0;

}

void dfs(int x,int y,int step)

{


int next[4][2]={

{1,0},{0,1},{-1,0},{0,-1}};

if(x

p&&y

q)//判断是否到达终点,也就是递归边界

{


if(step<min)

min=step;

return;

}

int tx,ty;//下一步的坐标

int k;//循环变量

for(k=0;k<=3;k++)

{


tx=x+next[k][0];

ty=y+next[k][1];

if(tx<1||tx>n||ty<1||ty>m)

continue;

if(a[tx][ty]==0&&book[tx][ty]==0)

{


book[tx][ty]=1;

dfs(tx,ty,step+1);

book[tx][ty]=0;

}

}

return;

}



版权声明:本文为qq_41907019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。