走迷宫//迷宫地图在数据文件maze.in中

来源:互联网 发布:轴承数据 编辑:程序博客网 时间:2024/04/28 07:39
走迷宫已知N*N迷宫地图在数据文件maze.in中,找出一条从源点(sx,sy)到目标点(tx,ty)的通路。#include "stdio.h"#define N  20main( ){  int a[N][N];   /* 可以定义为char类型,这样可存放大地图 */int sx, sy, tx, ty, t, i, j, k, n, x, y;int  dx[4], dy[4];struct { int x;      int y;    int k; } path[N*N];   /* 存放找到通路坐标和走向 */  FILE *fp;   /* 下面从文件读迷宫地图 */fp=fopen("maze.in", "r");  fscanf(fp,"%d\n",&n);  for(i=0;i<n; i++)    for(j=0;j<n;j++)    fscanf(fp,"%d",&a[i][j]);fscanf(fp,"%d %d %d %d",&sx,&sy,&tx,&ty);fclose(fp);  dx[0]=1;   dy[0]=0;    /*dowm的增量*/  dx[1]=0;   dy[1]=1;    /* right的增量 */  dx[2]=-1;  dy[2]=0;   /*  up 的增量*/  dx[3]=0;   dy[3]=-1;   /*  left 的增量*/  t=0;  x=sx; y=sy;   k=-1;  path[0].x=sx;    path[0].y=sy;    path[0].k = -1;  do {    do   { ◆k++;      ◆x+=dx[k];  y+=dy[k];   /*选走向K时走到的当前坐标*/◆if  (  (x>=0)&&(x<n)&& (y>=0)&&(y<n)&& (a[x] [y]==0) )  /* 能走  */{            t++;     path[t].x=x;  path[t].y=y;  path[t].k=k;   /*记录通路*/          a[x] [y]=-1;    /*封锁以防重复判断*/     if ((x==tx)&&(y==ty))        goto Lout;     /*找到目标点,跳出二重循环*/     else         k=-1;   /*继续向前搜索 */         }      ◆else    /* 还原,以便换走向*/     {  x-=dx[k];  y-=dy[k];  }     } while (k<3);     /* 走不动时,以下回溯*/ k=path[t].k; t--;  x=path[t].x;  y=path[t].y;    } while (t>=0); Lout:   for(i=0; i<=t; i++)    printf("(%d %d) \n", path[i].x ,  path[i].y);  return 0;}

原创粉丝点击