数据结构作业!求大神帮忙看看啊!

#include
#include
#include
int map[20][20];
int book[20][20];
int n;
struct node{
int x;
int y;
int step;
struct node*pre;
struct node*next;
};
struct node queue[401];
struct node head=NULL,*tail=NULL;
struct node *create(struct node*head){
struct node
p=(struct node*)malloc(sizeof(struct node));
if(p==NULL) return 0;
head=p;
head->pre=NULL;
head->next=NULL;
tail=head;
return head;
}
void hpush(struct node*head,struct node* a){
struct node*tem=(struct node*)malloc(sizeof(struct node));
if(tem==NULL) return ;
tem->x=a->x;
tem->y=a->y;
tem->step=a->step;
if(head->next!=NULL){
head->next->pre=tem;
tem->next=head->next;
tem->pre=head;
head->next=tem;
}
else {
head->next=tem;
tem->next=NULL;
tail=tem;
}
}
void tpush(struct node*head,struct node a){
struct node*tem=(struct node
)malloc(sizeof(struct node));
if(tem==NULL) return ;
tail->next=tem;
tem->x=a->x;
tem->y=a->y;
tem->step=a->step;
tem->pre=tail;
tem->next=NULL;
tail=tem;
}
void hpop(struct node*head){
struct node*tem=head->next;
if(tem==NULL) return ;
head->next=tem->next;
if(tem->next!=NULL)tem->next->pre=head;
free(tem);
}
void tpop(struct node*head){
if(tail==head) return ;
struct node*tem2=tail->pre;
free(tail);
tail=tem2;
tail->next=NULL;
}
void visit(struct node*head){
struct node*tem=head->next;
if(tem==NULL) return ;
while(tem!=NULL){
printf("%d ",tem->x);
tem=tem->next;
}
}
void createmap(int n){
for(int i=0;i for(int j=0;j map[i][j]=rand()%2;
}
}
map[0][0]=0,map[n-1][n-1]=0;
for(int i=0;i for(int j=0;j printf("%d",map[i][j]);
}
printf("\n");
}
}
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int bfs(){
struct node *tem,*next;
tem=(struct node*)malloc(sizeof(struct node));
tem->x=0,tem->y=0;
book[tem->x][tem->y]=1;
tem->step=0;
tpush(head,tem);
while(head!=tail){
tem=head->next;
hpop(head);
if(tem->x==n-1&&tem->y==n-1)
return tem->step;
for(int i=0;i next=(struct node*)malloc(sizeof(struct node));
next->x=tem->x;
next->y=tem->y;
next->step=tem->step;
next->x=tem->x+dir[i][0];
next->y=tem->y+dir[i][1];
if(next->xyx==n||next->y==n||book[next->x][next->y]==1||map[next->x][next->y]==1)
{
free(next);
continue;
}
book[next->x][next->y]=1;
tpush(head,next);
}
}
return 0;
}
int main(int argc, char* argv[]){
head=create(head);
memset(map,0,sizeof(map));
scanf("%d",&n);
createmap(n);
int out=bfs();
if(out==0)printf("you are trapped!");
else printf("you can escape in %d minutes",out);
free(head);
return 0;
}
做一个迷宫,迷宫自动生成,1为障碍,0为可走的,从左上角走到右下角~~!

1个回答

你是在做一个迷宫游戏吗?
关键是这份作业的目标,你的代码注释,还有你的问题所在你都没给啊?
大家其实是没有那么多耐心自己一一去为你找出来的~
所以,你补全再问一下呗

qq_31951747
qq_31951747 做一个迷宫,迷宫自动生成,1为障碍,0为可走的,从左上角走到右下角~~!大神求看啊!!
接近 4 年之前 回复
qq_31951747
qq_31951747 做一个迷宫,迷宫自动生成,1为障碍,0为可走的,从左上角走到右下角~~!
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!