Cluoluoya 2016-04-07 01:36
浏览 1347

求能帮忙改改迷宫的代码

图片说明
走用链栈走迷宫,我的代码如下。一直调试不成功,希望能求救
#include
#include
#define M 10
#define N 10

typedef struct stack_type{
struct block_type *top;

}stack_type;

typedef struct block_type{
int i,j;

int di;
struct block_type *next;

}block_type;

int mg[M+1][N+1]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};
int main(void)
{
int i,j,di,find,k;
stack_type *s;
s=malloc(sizeof(stack_type));
block_type *p;
p=malloc(sizeof(block_type));
p->i=1;
p->j=1;
p->di=-1;
mg[1][1]=-1;
s->top=p;

while(s->top!=NULL){
i=p->i;j=p->j;di=p->di;
if(i==M-2&&j==N-2){
printf("The path is:\n");
for ( ;s->top!=NULL;s->top=s->top->next){
printf("\t(%d,%d)",s->top->i,s->top->j);
}
return 0;
}

find=0;
while (di {di++;
switch(di){
case 0: i = s->top->i - 1;
j = s->top->j; break;
case 1: i = s->top->i;
j =s->top->j+1; break;
case 2: i = s->top->i + 1;
j = s->top->j; break;
case 3: i = s->top->i;
j = s->top->j - 1; break;
}
if (mg[i][j]==0){
find=1;
}
}

          if(find==1){
            block_type *p;
            p=malloc(sizeof(block_type));
                 p->di=di;
                 p->i=i;
                 p->j=j;
                 p->di=-1;
                 mg[i][j]=-1;
                   s->top->next=p;       
           }
           else
           {
           mg[s->top->i][s->top->j]=0;
           block_type *temp;
           temp=s->top;
           s->top=s->top->next;
           free(temp); 
            }  
    }
return 0;

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!