| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:迷宫问题里不能输出通路!程序比较长,希望指导一下!!!
只看楼主 加入收藏
怀特411
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2011-6-24
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:3 
迷宫问题里不能输出通路!程序比较长,希望指导一下!!!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct{
int x,y,d;}DataType;

typedef struct{
int x,y;
}item;

typedef struct node{
DataType data;
struct node *next;
}StackNode,*PStackNode;

typedef struct{
   PStackNode  top;
}LinkStack,*PLinkStack;

PLinkStack  Init_LinkStack(void)
{ PLinkStack S;
  S=(PLinkStack)malloc(sizeof(LinkStack));
  if(S)  S->top=NULL;
  return(S);
}

int Empty_LinkStack(PLinkStack S)
{ return(S->top==NULL);}
int Push_LinkStack(PLinkStack S,DataType x)
{  PStackNode p;
   p=(PStackNode)malloc(sizeof(StackNode));
   if(!p)
   {
      printf("内存溢出");
      return(0);
   }
   p->data=x;
   p->next=S->top;
   S->top=p;
   return(1);
}

int Pop_LinkStack(PLinkStack S,DataType *x)
{PStackNode p;

 if(Empty_LinkStack(S))
{

 printf("栈空 不能出栈");
     return(0);
}
*x=S->top->data;
p=S->top;
S->top=S->top->next;
free(p);
return(1);
}

void Destroy_LinkStack(PLinkStack *LS)
{PStackNode p,q;
  if(*LS)
   {
      p=(*LS) ->top;
      while(p)
      {
        q=p;
        p=p->next;
         free(q);
       }
        free(*LS) ;
    }
    *LS=NULL;
     return;
}

void mg(int a[10][10], int m, int n)    //创建迷宫并在四周设障碍
{
    int i, j;
    for (i = 0, j = 0; i < m + 2; i++)
        a[i][j] = 1;
    for (i = 0, j = n + 1; i < m + 2; i++)
        a[i][j] = 1;
    for (j = 0, i = 0; j < n + 2; j++)
        a[i][j] = 1;
    for (j = 0, i = m + 1; j < n + 1; j++)
        a[i][j] = 1;
    printf("Give me the map\n");
    for (i = 1; i <= m; i++)
        for (j = 1; j <= n; j++)
            scanf("%d", &a[i][j]);
}
void print(int a[10][10], int m, int n) //打印迷宫
{
    int i, j;
    for (i = 0; i <= m + 1; i++) {
        for (j = 0; j <= n + 1; j++) {
            printf("%5d", a[i][j]);
        }
        printf("\n");
    }
}


 int mazepath(int maze[10][10],item *move,int x0,int y0,int m,int n)
{/*求迷宫路径,入口参数:指向迷宫数组的指针,指向移动方向的指针,开始点(x0,y0),到达点(m,n),返回值:1表示求出路径,0表示无路径*/
  PLinkStack S;
  DataType  temp;
  int x,y,d,i,j;
  temp.x=x0;temp.y=y0;temp.d=-1;
   S= Init_LinkStack();/*初始化栈*/
   if(!S)
   {
     printf("栈初始化失败");
     return(0);
    }

 Push_LinkStack(S,temp);/*迷宫入点口入栈*/

 while(!Empty_LinkStack(S))
  {
    Pop_LinkStack(S,&temp);
    x=temp.x;y=temp.y;d=temp.d+1;maze[x][y]=0;
     while(d<4)/*存在剩余方向可以搜索*/
     {
       i=x+move[d].x;j=y+move[d].y;
        if(maze[i][j]==0)/*此方向可走*/
        {temp.x=x;
         temp.y=y;
         temp.d=d;
         Push_LinkStack(S,temp);/*点{x,y}可以走,用栈保存可以走的路径*/
          x=i;y=j;maze[x][y]=-1;
         if(x==m &&y==n)/*迷宫有路*/
          {   while(!Empty_LinkStack(S))
              { Pop_LinkStack(S,&temp);
                 printf("(%d,%d)<-",temp.x,temp.y);/*打印可走的路径*/
               }
               Destroy_LinkStack(&S);/*销毁栈*/
               return 1;
           }
           else  d=0;/*方向复位,从第一个方向开始试探*/
         }
         else   d++;/*试探下一个方向*/
       }
  }
   Destroy_LinkStack(&S);
return 0;
}

void main()
{  
    int r, c;
    item move[4];
    int maze[10][10];
    int x0=1;
    int y0=1;
    printf("Give me r & c\n");
    scanf("%d,%d", &r, &c);
    mg(maze, r, c);
    printf("It's like this\n");
    print(maze, r, c);
     printf("the mazepath is:\n");
   mazepath(maze,move,x0,y0,r,c);
}



 
搜索更多相关主题的帖子: 通路 
2011-06-24 23:40
官人
Rank: 3Rank: 3
来 自:瓮安
等 级:论坛游侠
帖 子:88
专家分:152
注 册:2011-6-2
收藏
得分:8 
好长

   ---------------天道刚健,你不自强谁来帮你---------------
2011-06-25 09:28
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:8 
哥们,你慢慢单步调吧……写一个模块调一个~
2011-06-25 12:40
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:0 
现在对了没?
2011-06-27 23:34
快速回复:迷宫问题里不能输出通路!程序比较长,希望指导一下!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014806 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved