zoukankan      html  css  js  c++  java
  • 迷宫(深度搜索)

      1 #include"iostream"
      2 #include"windows.h"
      3 #include"time.h"
      4 using namespace std;
      5 
      6 //gotoxy() x是第x列,y是第y行
      7 void gotoxy(int x, int y) //goto语句  
      8 {  
      9     COORD pos;  
     10     pos.X = x;  
     11     pos.Y = y;  
     12     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);  
     13 }
     14 
     15 class Maze{
     16 private:
     17     char **map;
     18     char bg;
     19     char wall;
     20     char cat;
     21     int w;
     22     int h;
     23 public:
     24     Maze(int w,int h);            //创建迷宫
     25     void setPattern(char bg,char wall,char cat);        //设置图案
     26     void initialization(char bg,char wall);                //随机初始化迷宫
     27     void show();                                        //打印迷宫
     28 
     29     bool move(int x,int y);                                //寻找出口
     30 };
     31 
     32 int main(){
     33     const char bg = ' ';
     34     const char wall = '#';
     35     const char cat = '>';
     36     Maze m1(80,20);
     37     m1.setPattern(bg,wall,cat);
     38     m1.initialization(bg,wall);
     39     m1.show();
     40     system("pause");
     41     bool b = m1.move(0,0);
     42     gotoxy(0,21);
     43     if(b){
     44         cout<<"成功"<<endl;
     45     }
     46     else{
     47         cout<<"未走出迷宫"<<endl;
     48     }
     49     gotoxy(0,23);
     50     system("pause");
     51     return 0;
     52 }
     53 Maze::Maze(int w,int h){
     54     this->w = w;
     55     this->h = h;
     56     map = new char*[h];
     57     for(int i = 0;i < h;i++){
     58         map[i] = new char[w];
     59     }
     60     bg = ' ';
     61     wall = '#';
     62     cat = '+';
     63 }
     64 void Maze::setPattern(char bg,char wall,char cat){
     65     this->bg = bg;
     66     this->wall = wall;
     67     this->cat = cat;
     68 }
     69 void Maze::initialization(char bg,char wall){
     70     srand(time(NULL));
     71     for(int i = 0;i < h;i++){
     72         for(int j = 0;j < w;j++){
     73             if(i == 0||j == 0||i == h - 1||j == w  - 1){
     74                 map[i][j] = wall;
     75             }
     76             else{
     77                 map[i][j] = rand() % 4 == 0 ? wall : bg;
     78             }
     79         }
     80     }
     81     map[1][1] = bg;
     82     map[0][1] = bg;
     83     map[0][0] = bg;
     84     map[h - 1][w - 1] = bg;
     85     map[h - 1][w - 2] = bg;
     86 }
     87 void Maze::show(){
     88     for(int i = 0;i < h;i++){
     89         for(int j = 0;j < w;j++){
     90             cout<<map[i][j];
     91         }
     92         cout<<endl;
     93     }
     94 }
     95 bool Maze::move(int x,int y){
     96     if(x<0||y<0){        //x,y是否合法
     97         return false;
     98     }
     99     if(x == w - 1&&y == h - 1){            //到达终点返回true
    100         return true;
    101     }
    102     //未到达终点
    103     if(map[y][x] == bg){                //如果该点是可以走的
    104         gotoxy(x,y);
    105         cout<<cat;
    106         Sleep(5);
    107         map[y][x] = cat;                //每走一格就填充,否则会倒退死循环
    108         //再走下一步
    109         if(move(x + 1,y)||move(x,y + 1)||move(x,y - 1)||move(x - 1,y)){                            //如果到达了终点,直接返回true
    110             return true;
    111         }
    112         //如果该点被走过但无法到达终点,标记为-
    113         else{                                
    114             gotoxy(x,y);
    115             cout<<'-';
    116         }
    117     }
    118     return false;
    119 }#include"iostream"
    120 #include"windows.h"
    121 #include"time.h"
    122 using namespace std;
    123 
    124 //gotoxy() x是第x列,y是第y行
    125 void gotoxy(int x, int y) //goto语句  
    126 {  
    127     COORD pos;  
    128     pos.X = x;  
    129     pos.Y = y;  
    130     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);  
    131 }
    132 
    133 class Maze{
    134 private:
    135     char **map;
    136     char bg;
    137     char wall;
    138     char cat;
    139     int w;
    140     int h;
    141 public:
    142     Maze(int w,int h);            //创建迷宫
    143     void setPattern(char bg,char wall,char cat);        //设置图案
    144     void initialization(char bg,char wall);                //随机初始化迷宫
    145     void show();                                        //打印迷宫
    146 
    147     bool move(int x,int y);                                //寻找出口
    148 };
    149 
    150 int main(){
    151     const char bg = ' ';
    152     const char wall = '#';
    153     const char cat = '>';
    154     Maze m1(80,20);
    155     m1.setPattern(bg,wall,cat);
    156     m1.initialization(bg,wall);
    157     m1.show();
    158     system("pause");
    159     bool b = m1.move(0,0);
    160     gotoxy(0,21);
    161     if(b){
    162         cout<<"成功"<<endl;
    163     }
    164     else{
    165         cout<<"未走出迷宫"<<endl;
    166     }
    167     gotoxy(0,23);
    168     system("pause");
    169     return 0;
    170 }
    171 Maze::Maze(int w,int h){
    172     this->w = w;
    173     this->h = h;
    174     map = new char*[h];
    175     for(int i = 0;i < h;i++){
    176         map[i] = new char[w];
    177     }
    178     bg = ' ';
    179     wall = '#';
    180     cat = '+';
    181 }
    182 void Maze::setPattern(char bg,char wall,char cat){
    183     this->bg = bg;
    184     this->wall = wall;
    185     this->cat = cat;
    186 }
    187 void Maze::initialization(char bg,char wall){
    188     srand(time(NULL));
    189     for(int i = 0;i < h;i++){
    190         for(int j = 0;j < w;j++){
    191             if(i == 0||j == 0||i == h - 1||j == w  - 1){
    192                 map[i][j] = wall;
    193             }
    194             else{
    195                 map[i][j] = rand() % 4 == 0 ? wall : bg;
    196             }
    197         }
    198     }
    199     map[1][1] = bg;
    200     map[0][1] = bg;
    201     map[0][0] = bg;
    202     map[h - 1][w - 1] = bg;
    203     map[h - 1][w - 2] = bg;
    204 }
    205 void Maze::show(){
    206     for(int i = 0;i < h;i++){
    207         for(int j = 0;j < w;j++){
    208             cout<<map[i][j];
    209         }
    210         cout<<endl;
    211     }
    212 }
    213 bool Maze::move(int x,int y){
    214     if(x<0||y<0){        //x,y是否合法
    215         return false;
    216     }
    217     if(x == w - 1&&y == h - 1){            //到达终点返回true
    218         return true;
    219     }
    220     //未到达终点
    221     if(map[y][x] == bg){                //如果该点是可以走的
    222         gotoxy(x,y);
    223         cout<<cat;
    224         Sleep(5);
    225         map[y][x] = cat;                //每走一格就填充,否则会倒退死循环
    226         //再走下一步
    227         if(move(x + 1,y)||move(x,y + 1)||move(x,y - 1)||move(x - 1,y)){                            //如果到达了终点,直接返回true
    228             return true;
    229         }
    230         //如果该点被走过但无法到达终点,标记为-
    231         else{                                
    232             gotoxy(x,y);
    233             cout<<'-';
    234         }
    235     }
    236     return false;
    237 }
    BY oleolema
  • 相关阅读:
    【vim使用】替换文本
    Ubuntu中将vim中查找设置为高亮
    【vim使用】查找文本
    【vim使用】缩进 和 重复执行上一次命令
    【vim使用】替换命令
    【vim使用】复制和粘贴
    【vim使用】撤销和恢复撤销
    【vim使用】删除文本
    【vim使用】选中文本(可视模式)
    【vim使用】利用标记返回之前需要编辑的代码位置
  • 原文地址:https://www.cnblogs.com/oleolema/p/9028393.html
Copyright © 2011-2022 走看看