創作內容

6 GP

【C++】走迷宮!

作者:龍靈│2012-12-15 08:30:22│贊助:12│人氣:4260
  這是一個小程式,他會自己去創造一個迷宮,然後在來走走看可不可以從左上走到右下。然後迷宮創造有對可以走的地方進行加權,不然一開始做幾乎都無法到達右下。  LOL

  實作是運用DFS演算法,算是練功用吧。  XDD


#include<iostream>
#include<ctime>

using namespace std;

bool TRY(int i,int j);

char miku[10][10];

int main()
{
    for(int i=0;i<10;i++)                   //創造迷宮 start
            for(int j=0;j<10;j++)
                    miku[i][j] = 1;
    
    srand(time(0));
    
    for(int i=1;i<9;i++)                    
            for(int j=1;j<9;j++)
                   if(rand()%100 < 65)             
                                 miku[i][j] = 0;     
    miku[1][1] = 0;                            //創造迷宮 end  

    cout << "The origin is: "<<endl;
    for(int i=0;i<10;i++)
    {                
            for(int j=0;j<10;j++)
                    cout << miku[i][j] << " ";
            cout << endl;
    }


    if(TRY(1,1))
    {
                     cout <<endl<< "the solution is " <<endl;
                     for(int i=0;i<10;i++)               
                             for(int j=0;j<10;j++)
                                     if(miku[i][j]==3)
                                                      miku[i][j]=0;
                     for(int i=0;i<10;i++)
                     {                
                                      for(int j=0;j<10;j++)
                                              cout << miku[i][j] << " ";
                               cout << endl;
                     }                     
    }
    else
                     cout <<endl<< "can't solve."<<endl;


    
    system("pause");
    return 0;
}

bool TRY(int i,int j)
{
     if(i==8&&j==8)
     {
                   miku[8][8] = '*';
                   return true;
     }
     if(miku[i][j+1]==0)
     {
                        miku[i][j] = '*';
                        return TRY(i,j+1);
     }
     else if(miku[i+1][j]==0)
          {
                        miku[i][j] = '*';
                        return TRY(i+1,j);
          }
     else if(miku[i-1][j]==0)
          {
                        miku[i][j] = '*';
                        return TRY(i-1,j);     
          }
     else if(miku[i][j-1]==0)
          {
                        miku[i][j] = '*';
                        return TRY(i,j-1);
          }     
     else
     {
         miku[i][j] = 3;
         if(miku[i][j+1]=='*')
                        return TRY(i,j+1);
         else if(miku[i+1][j]=='*')
                        return TRY(i+1,j);
         else if(miku[i-1][j]=='*')
                        return TRY(i-1,j);     
         else if(miku[i][j-1]=='*')
                        return TRY(i,j-1);
         else
                            return false;
     }
}


如果創造出來的迷宮無解。
  
如果創造出來的迷宮有解。   


     
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1834072
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:C|C++|程式設計|迷宮|資料結構|DFS|深度優先|演算法

留言共 1 篇留言

OwO~♩♫
可以拿來玩嘛xD

12-15 20:10

龍靈
他會自己跑跑看,看迷宮可不可以走到最後。 LOL12-15 20:22
我要留言提醒:您尚未登入,請先登入再留言

6喜歡★npes87184 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:背影... 後一篇:【C++】用遞迴實作bu...

追蹤私訊

作品資料夾

JadeGamer大家
國產獨立懷舊 RPG 《魯蛇轉生》已於 Steam 上發行! https://store.steampowered.com/app/1127920/ 看似惡搞、暗藏玄機……看更多我要大聲說昨天20:00


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】