当前位置:编程学习 > C/C++ >>

迷宫问题

[cpp]
//功能:利用递归调用完成迷宫问题的求解  
#include <stdio.h>  
#include <stdlib.h>  
#include <conio.h>  
#include <time.h>  
//申明迷宫函数  
int maze(char **a,int m,int n); 
 
//定义全局变量i,j用来存放迷宫数组的行数和列数  
int i,j; 
 
int main() 

    int k; 
    int m,n; 
    char **a;//定义指向迷宫数组的二维指针  
    printf("\n************************************迷宫问题************************************"); 
    printf("\t\t1、输入自己的迷宫\n\t\t2、系统随机产生一个迷宫\n"); 
    scanf("%d",&k); 
    printf("输入迷宫的行数和列数:"); 
    scanf("%d%d",&i,&j); 
    getchar(); 
    //动态分配迷宫数组的存储区域  
    a=(char **)malloc(sizeof(char *)*i); 
    for(m=0;m<i;m++) 
    { 
        a[m]=(char *)malloc(sizeof(char)*j); 
    } 
    //输入自己的迷宫数组元素  
    if(k==1) 
    { 
        printf("输入一个迷宫数组,用1表示墙壁,用0表示空白区域\n"); 
        for(m=0;m<i;m++) 
        { 
            for(n=0;n<j;n++) 
            { 
                a[m][n]=getchar(); 
            } 
            getchar(); 
        } 
        printf("你输入的迷宫为:\n"); 
        for(m=0;m<i;m++) 
        { 
            for(n=0;n<j;n++) 
            { 
                printf(" %c ",a[m][n]); 
            } 
            printf("\n"); 
        } 
    } 
    //系统初始化一个迷宫数组  
    else 
    { 
        //初始化一个迷宫数组并随机产生墙壁与空白,用1表示墙壁,用0表示空白区域  
        srand((int)time(0)); 
        for(m=0;m<i;m++) 
        { 
            for(n=0;n<j;n++) 
            { 
                a[m][n]=rand()%2+'0'; 
                printf(" %c ",a[m][n]); 
            } 
            printf("\n"); 
        } 
    } 
    if(maze(a,0,0)) 
    { 
        printf("找到了路径!\n"); 
        for(m=0;m<i;m++) 
        { 
            for(n=0;n<j;n++) 
            { 
                printf(" %c ",a[m][n]); 
            } 
            printf("\n"); 
        } 
    } 
    else 
    { 
        printf("该迷宫为死迷宫!\n"); 
    } 
    getch(); 
    return 0; 

 
int maze(char **a,int m,int n) 

    int k; 
    //该条件用于首次判断  
    if(a[m][n]=='1') 
        return 0; 
    a[m][n]='2'; 
    if(m==i-1 && n==j-1 && a[m][n]=='2') 
        return 1;    
    //向下走  
    if(m+1<i && a[m+1][n]=='0') 
    { 
        k=maze(a,m+1,n); 
        if(k==1) 
            return 1; 
    } 
    //向上走  
    if(m-1>-1 && a[m-1][n]=='0') 
    { 
        k=maze(a,m-1,n); 
        if(k==1) 
            return 1; 
    }    
    //向右走  
    if(n+1<j && a[m][n+1]=='0') 
    { 
        k=maze(a,m,n+1); 
        if(k==1) 
            return 1; 
    } 
    //向左走  
    if(n-1>-1 && a[m][n-1]=='0') 
    { 
        k=maze(a,m,n-1); 
        if(k==1) 
            return 1; 
    } 
    a[m][n]='0'; 
    return 0; 

//功能:利用递归调用完成迷宫问题的求解
#include <stdio.h>
#include <stdlib.h>
#include <c

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,