| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2870 人关注过本帖
标题:数据结构严蔚敏C语言版 迷宫问题求解
取消只看楼主 加入收藏
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
数据结构严蔚敏C语言版 迷宫问题求解
#include<stdio.h>
#define r 64
#define m2 8
#define n2 10
int m=m2-2,n=n2-2;
typedef struct
{
    int x,y;    //行列坐标
    int pre;
}sqtype;

sqtype sq[r];
struct moved
{
    int x, y;  //坐标增量,取值-1,0,1
}move[8];

int maze[m2][n2];

int PATH(int maze[][n2])  //找迷宫maze的路径
{
    int i,j,k,v,front,rear,x,y;
    int mark[m2][n2];
    for(i=0;i<m2;i++)
        for(j=0;j<n2;j++)
            mark[i ][j]=0;
    printf("Please Input move array\n");
    for(i=0;i<8;i++)
    {
        scanf("%d,%d",&move[i ].x,&move[i ].y);
    sq[1].x=1;
    sq[1].y=1;
    sq[1].pre=0;
    front=1;
    rear=1;
    mark[1][1]=1;   //标记入口以到达过
    while(front<=rear)
    {
        x=sq[front].x;
        y=sq[front].y;    //(x,y)为出发点
        for(v=0;v<8;v++)  //搜索(x,y)的8个相邻(i,j)是否可以到达
        {
            i=x+move[v].x;
            j=y+move[v].y;
            if((maze[i ][j]==0)&&(mark[i ][j]==0))//(i,j)为可以到达点,将起入队
            {
                rear++;
                sq[rear].pre=front;
                mark[i ][j]=1; //标记(i,j)已经到达过
            }
            if((i==m)&&(j==n))    //到达出口
            {
                printf("THE PATH: \n");
                k=rear;
                do
                {
                    printf("(%d %d)<-",sq[k].x,sq[k].y);
                    k=sq[k].pre;//找前一点
                }while(k!=0);//k=0是已经到达
                for(i=1;i<19;i++)
                    printf("%3d",i);
                printf("\n");
                for(i=1;i<19;i++)
                    printf("%3d",sq[i ].x);
                printf("\n");
                for(i=1;i<19;i++)
                    printf("%3d",sq[i ].y);
                printf("\n");
                for(i=1;i<19;i++)
                    printf("%3d",sq[i ].pre);
                printf("\n");
                return(1);      //成功返回
            }
        }
        front++;   //出队,front 指向新的出发点
    }
    }
     //队空,循环结束
    printf("There is no path! \n");
    return(0);   //迷宫没有路径返回
}

main()
{
    int i,j;
    for(i=0;i<10;i++)
    {
        maze[0][i ]=1;
        maze[7][i ]=1;
    }
    for(i=0;i<8;i++)
    {
        maze[i ][0]=1;
        maze[i ][9]=1;
    }
    /*for(i=1;i<7;i++)
        for(j=1;j<9;j++)
        {
            printf("%d %d",i,j);
            scanf("%d",&maze[i ][j]);
        }*/   
    maze[1][1]=0;maze[1][2]=1;maze[1][3]=0;maze[1][4]=1;maze[1][5]=1;maze[1][6]=0;maze[1][7]=1;maze[1][8]=1;
    maze[2][1]=1;maze[2][2]=0;maze[2][3]=0;maze[2][4]=1;maze[2][5]=1;maze[2][6]=0;maze[2][7]=1;maze[2][8]=0;
    maze[3][1]=0;maze[3][2]=1;maze[3][3]=1;maze[3][4]=0;maze[3][5]=0;maze[3][6]=1;maze[3][7]=1;maze[3][8]=1;
    maze[4][1]=1;maze[4][2]=0;maze[4][3]=0;maze[4][4]=1;maze[4][5]=1;maze[4][6]=0;maze[3][7]=0;maze[4][8]=1;
    maze[5][1]=1;maze[5][2]=1;maze[5][3]=0;maze[5][4]=0;maze[5][5]=1;maze[5][6]=1;maze[5][7]=0;maze[5][8]=1;
    maze[6][1]=0;maze[6][2]=1;maze[6][3]=1;maze[6][4]=1;maze[6][5]=0;maze[6][6]=0;maze[6][7]=0;maze[6][8]=0;

    printf("\n");
    for(i=0;i<8;i++)
    {
        for(j=0;j<10;j++)
            printf("%d",maze[i ][j]);
        printf("\n");
    }
    PATH(maze);
}
搜索更多相关主题的帖子: C语言 include 
2015-10-29 08:34
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
收藏
得分:0 
回复 2楼 令狐少侠56
希望能够讲解一下思路

小小的天有大大的梦想
2015-11-06 08:59
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
收藏
得分:0 
能给说说这个数的名字吗?其实我想知道怎样去写需要用到的那些函数,一开始怎么就能先到用那些函数呢?

小小的天有大大的梦想
2015-11-16 22:46
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
收藏
得分:0 
回复 7楼 来生再见
棒棒哒,数据结构有毒,对女生来说就是有毒

小小的天有大大的梦想
2015-12-24 09:51
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
收藏
得分:0 
回复 7楼 来生再见
运行出问题了

小小的天有大大的梦想
2015-12-24 09:55
快速回复:数据结构严蔚敏C语言版 迷宫问题求解
数据加载中...
 
   



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

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