C语言算法实现迷宫问题1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct sta
{
int i;
int j;
int d;
struct sta *next;
}stack;
int migong[50][50]={1};//首先全部定义为墙壁
void push(stack *p,stack *l,stack *top) //压栈
{
stack *q;
q=(struct sta*)malloc(sizeof(struct sta));
q->d=p->d;
q->i=p->i;
q->j=p->j;
q->next=NULL;
if (l->next=NULL) l->next=q;
else
{
l->next=q;
q->next=top;
}
top=q;
}
void pop(stack *p,stack *l,stack *top)
{
l->next=top->next;
p->d=top->d;
p->i=top->i;
p->j=top->j;
top=top->next;
}
int judge(stack *p)
{
if (migong[p->i][p->j]==1) return 0;
else return 1;
}
int move(stack *p,int m,int n,stack *l,stack *top)
{
migong[p->i][p->j]=-1;
for(p->d=1;p->d<9;p->d++)
{
push(p,l,top);
if(p->d==1) {p->i--;}
if(p->d==2) {p->i--;p->j++;}
if(p->d==3) {p->j++;}
if(p->d==4) {p->i++;p->j++;}
if(p->d==5) {p->i++;}
if(p->d==6) {p->j--;p->i++;}
if(p->d==7) {p->i--;}
if(p->d==8) {p->j--;p->j--;}
if (p->i=m&&p->j==n) return 1;
else
{
if(judge(p))
move(p,m,n,l,top);
else
{
pop(p,l,top);
break;
}
}
}
return 0;
}
void prnt(stack *l)
{
stack *p=l->next;
while(p)
{
printf("[%d,%d,%d}->",p->i,p->j,p->d);
}
}
void main()
{
stack *l,*top;
l=(stack*)malloc(sizeof(stack));
l->next=NULL;
top=l;
int m,n,i,j,d;
printf("请输入迷宫的大小:\n行数:");
scanf("%d",&m);
printf("列数:");
scanf("%d",&n);
printf("请逐行布置迷宫:\n");
for(i=1;i<=m;i++)
{
printf("第%d行:",i);
for(j=1;j<=n;j++)
scanf("%d",&migong[i][j]);
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
printf("%d ",migong[i][j]);
printf("\n");
}
printf("迷宫布置完毕,现在进入迷宫,入口为(1,1),出口为(%d,%d)",m-1,n-1);
if(move(top,m,n,l,top))
{
printf("找到通路.");
prnt(l);
}
else printf("没有通路!");
}
posted @ 2009-03-28 00:20  glc400  阅读(384)  评论(0编辑  收藏  举报