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;
}