现在的位置: 首页 > 综合 > 正文

poj3984

2013年12月09日 ⁄ 综合 ⁄ 共 913字 ⁄ 字号 评论关闭

这道题是迷宫问题的,采用广搜的方法,建立的算法是一个树吧!我也是刚学习图的,想了一上午还是没有把代码写出来只是明白意思,然后就看别人的代码,然后分析了好半天,终于弄明白了!
#include<stdio.h>
int a[6][6],p[4],q[4];
int prime=0,sum=1;
struct fun{
       int x,y,pre;
}t[100];
void print(int i)
{
     if(t[i].pre!=-1)
     {
       print(t[i].pre);
       printf("(%d, %d)\n",t[i].x,t[i].y);
     }
 }
int find(int x1,int x2)
{
    int i,c,d;
    q[0]=1;q[1]=-1;q[2]=0;q[3]=0;
    p[0]=0;p[1]=0;p[2]=1;p[3]=-1;
    t[prime].x=x1;
    t[prime].y=x2;
    t[prime].pre=-1;
    while(prime<sum)
    {
        for(i=0;i<4;i++)
        {
          c=p[i]+t[prime].x;
          d=q[i]+t[prime].y; 
          if(c<0||c>4||d<0||d>4||a[c][d]==1)
           continue;
          else
          {  
              t[sum].x=c;
              t[sum].y=d;
              t[sum].pre=prime;
              a[c][d]=1; 
              sum++;
          }
          if(c==4&&d==4)
          { 
           print(prime);
           return 0;
           }
        }
        prime++;
    }
}
int main()
{
    int i,j;
    for(i=0;i<5;i++)
      for(j=0;j<5;j++)
       scanf("%d",&a[i][j]);
    printf("(0, 0)\n");
    find(0,0);
    printf("(4, 4)\n"); 
    return 0;
}

抱歉!评论已关闭.