我写了个迷宫程序感觉可读性不怎么好,有哪位大侠给点建议。什么样的程序比较好。
#include<stdio.h>
#include<malloc.h>
#define N 100
int n;
int m;
typedef struct migong
{
int h[N];
int l[N];
int top;
}list;
void creat(int a[N][N]) //迷宫的创建函数
{
int i,j;
printf("请您输入二维迷宫的行列数 :\n");
scanf("%d%d",&n,&m);
printf("请你输入迷宫的通道和墙,是墙的请输入1,是通道的请输入0:\n");
for(i=0;i<n;i++) //输入墙和通路
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
printf("显示你的迷宫:\n");
for(i=0;i<n;i++) //显示你的迷宫
{
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
list *creatpush() //这样写感觉不好
{
list *p=(list *)malloc(sizeof(list));
return p;
}
void csh(list *p) //栈的初始化
{
p->top=-1;
}
void push(list *p,int hs,int ls) //入栈
{
p->top++;
p->h[p->top]=hs;
p->l[p->top]=ls;
}
void pop(list *p)
{
p->top--;
}
void search(int a[N][N],list *p) //路径的查找函数
{
int i,j;
int h,l;
int w,t;
printf("\n");
printf("请输入迷宫的入口位置:\n");
while(1)
{
scanf("%d%d",&i,&j);
if(i>=0 && i<n && j<m && j>=0)
break;
else
printf("您输入的入口位置不符合请重新输入:\n");
}
printf("你的入口位置为<%d, %d>\n",i,j);
w=i;
t=j;
a[i][j]=2;
printf("\n请输入迷宫的出口位置:\n");
while(1)
{
scanf("%d%d",&h,&l);
if(h>=0 && h<n && l<m && l>=0)
break;
else
printf("您输入的出口位置不对请重新输入:\n");
}
printf("你的出口位置为<%d ,%d> \n",h,l);
while(i!=h || j!=l) //路径的查找
{
if((i!=h || j!=l) && a[i][j+1]==0)
{
i=i;
j=j+1;
push(p,i,j);
a[i][j]=2;
}
else if((i!=h || j!=l) && a[i+1][j]==0)
{
i=i+1;
j=j;
push(p,i,j);
a[i][j]=2;
}
else if((i!=h || j!=l) && a[i][j-1]==0)
{
i=i;
j=j-1;
push(p,i,j);
a[i][j]=2;
}
else if((i!=h || j!=l) && a[i-1][j]==0)
{
i=i-1;
j=j;
push(p,i,j);
a[i][j]=2;
}
else if((i!=h || j!=l) && a[i][j+1]==2 && a[i+1][j]!=0 && a[i][j-1]!=0 && a[i-1][j]!=0)
{
a[i][j]=3;
i=i;
j=j+1;
pop(p);
}
else if((i!=h || j!=l) && a[i+1][j]==2 && a[i][j+1]!=0 && a[i][j-1]!=0 && a[i-1][j]!=0)
{
a[i][j]=3;
i=i+1;
j=j;
pop(p);
}
else if ((i!=h || j!=l) && a[i][j-1]==2 && a[i+1][j]!=0 && a[i][j+1]!=0 && a[i-1][j]!=0)
{
a[i][j]=3;
i=i;
j=j-1;
pop(p);
}
else if ((i!=h || j!=l) && a[i-1][j]==2 && a[i+1][j]!=0 && a[i][j-1]!=0 && a[i][j+1]!=0)
{
a[i][j]=3;
i=i-1;
j=j;
pop(p);
}
else
break;
}
}
void print(list *p) //路径的输出函数
{
if(p->top==-1)
printf("您输入的迷宫的入口和出口没有出路:\n");
else
{
printf("你的迷宫出路的路径为:\n");
while(p->top>=0)
{
printf("<%d ,%d >:\n",p->h[p->top],p->l[p->top]);
p->top--;
}
}
}
void print_sort(int a[N][N]) //显示迷宫走过的点
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
int main()
{
list *p;
int a[N][N];
p=creatpush();
csh(p);
creatpush(p);
creat(a);
search(a,p);
print(p);
print_sort(a);
return 0;
}
希望各位大侠给点建议