posts - 1,  comments - 0,  trackbacks - 0
#include <iostream>
using namespace std;

#define GRID_NUM 11    //迷宫格子数


//利用矩阵来存储迷宫地图
//0表示墙,1表示路
//探索到的死路将被赋为-1
int map[GRID_NUM][GRID_NUM]={
        
{0,0,0,0,0,0,0,0,0,0,0},
       
{99,1,1,0,0,0,0,0,0,0,0},
        
{0,0,1,0,0,0,0,1,0,0,0},
        
{0,0,1,0,0,0,0,1,0,0,0},
        
{0,1,1,1,1,0,0,1,0,0,0},
        
{0,1,0,0,0,0,0,1,0,0,0},
        
{0,1,1,1,1,1,1,1,1,1,0},
        
{0,0,0,0,1,0,0,1,0,0,0},
        
{0,0,0,0,1,0,0,1,0,0,0},
        
{0,0,0,0,0,0,0,1,1,1,100},
        
{0,0,0,0,0,0,0,0,0,0,0}
        }
;
//==================================================================
//从当前位置探索可通路径(死路除外)的条数,并返回
int switchmany(int *current){
    
int s=0;
    
if(*(current-GRID_NUM)>=1){s++;}
    
if(*(current+GRID_NUM)>=1){s++;}
    
if(*(current+1)>=1){s++;}
    
if(*(current-1)>=1){s++;}
    
return s;
    }



//寻路,探索某个确定的方向上的路是否可通
int whichway(int*current){
    
if(*(current-GRID_NUM)>=1){return 1;}//
    if(*(current+GRID_NUM)>=1){return 2;}
    
if(*(current+1)>=1){return 3;}
    
if(*(current-1)>=1){return 4;}
    
return -1;
}

int whichway2(int*current){
    
if(*(current-GRID_NUM)==-1){return 1;}
    
if(*(current+GRID_NUM)==-1){return 2;}
    
if(*(current+1)==-1){return 3;}
    
if(*(current-1)==-1){return 4;}
    
return -1;
}




//根据给定的whichway向某一确定的方向走一步
int* go(int *current,int whichway){
    
switch (whichway){
        
case 1:current=current-GRID_NUM;break;
        
case 2:current=current+GRID_NUM;break;
        
case 3:current++;break;
        
case 4:current--;break;
    }

    
return current;
}


//===============================输出==================================
//输出路径
void output(int *inc[100],int *a,int all){
    cout
<<"探索迷宫路径"<<endl;
   
int **pc;
   pc
=inc;
   
int x,y,i;
   cout
<<"(1,2) --> ";
   
for (int k=0;k<all;k++){
   i
=*pc-a+1;
   x
=i%GRID_NUM;
   
if(x==0){
        y
=(i-x)/GRID_NUM;
        x
=GRID_NUM;
   }
else{
       y
=(i-x)/GRID_NUM+1;
   }

   cout
<<"("<<x<<","<<y<<") --> ";
   pc
++;
   }

    cout
<<"("<<x+1<<","<<y<<")"<<endl;
}





//==================================main===================================
int main()
{
    
int *b[80],*allpath[100];//保存足迹
    int **top=b,**pc=allpath;
    
    
int *curPos=&map[1][0];//将迷宫的入口位置赋给curPos
    *top=curPos;//当前位置进栈
    *curPos=-1;
    curPos
++;//先向右走一步
    top++;
    
*curPos=-1;
    
*top=curPos;//当前位置进栈
    
    
int all=0;//all保存总足印数

    
//------------------------------------------
    while(*curPos!=100){//没走到迷宫出口
    
        
if(switchmany(curPos)==0){
            
*curPos=0;
            
while(curPos!=(*top)){
            
*pc=curPos;
            pc
++;
            all
++;
            
*curPos=0;
            curPos
=go(curPos,whichway2(curPos));
               }

            curPos
=*top;
            top
--;
        }

        
if(switchmany(curPos)==1){
            
while(switchmany(curPos)==1){
            
*curPos=-1;
            
*pc=curPos;
            pc
++;
            all
++;
            curPos
=go(curPos,whichway(curPos));

            }

        }

        
if(switchmany(curPos)>1){
            
*curPos=-1;
            top
++;
            
*top=curPos;//当前位置进栈
            *pc=curPos;
            pc
++;
            all
++;
            curPos
=go(curPos,whichway(curPos));
        }

    }

    output(allpath,
&map[0][0],all);
    
return 0;
}
posted on 2008-12-02 09:22 Gaojingluo 阅读(104) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理