最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)走迷宮

 更新時(shí)間:2020年07月22日 17:10:08   作者:回城之光  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)走迷宮的具體代碼,供大家參考,具體內(nèi)容如下

描述

給一張個(gè)迷宮,問能否從起點(diǎn)走到終點(diǎn),只能往上下左右走,不能斜著走

輸入

多組測試數(shù)據(jù),每組第一行兩個(gè)正整數(shù),分別為n和m

表示n這個(gè)迷宮有n行m列(0<n,m<10)

接著是n行m列,

'#'表示路

‘*'表示墻

‘S'表示起點(diǎn)

‘T'表示終點(diǎn)

輸出

每組測試數(shù)據(jù)輸出一個(gè)結(jié)果,如果能從S走到T,輸出“YES”,否則輸出“NO”

輸入樣例:

2 2
S*
#T
3 3
S*#
#T
##

輸出樣例:

YES
NO

有兩種方法可以解決這個(gè)問題

第一種深度優(yōu)先搜索:站在入口,考慮自己下一步可以走哪里,走到下一個(gè)位置后,再考慮下一步怎么走,一直走下去,直到?jīng)]有路,然后再返回最近的一個(gè)岔路口,選其它任一條沒試過的路,如果不能走,再嘗試其他的路,直到這個(gè)岔路口的路全部試完,再回到上一個(gè)路口,看是否能走到出口,相當(dāng)于一條路走到黑

#include<bits/stdc++.h>

using namespace std;
char a[20][20];  //存儲(chǔ)迷宮字符數(shù)組
int flag,m,n;
int sdep_x[4]={-1,1,0,0},sdep_y[4]={0,0,-1,1};//控制上下左右方向
int vis[20][20]; //標(biāo)記走過的路
void dfs(int x,int y)
{
 vis[x][y]=1; //代表被標(biāo)記過了
 if(a[x][y]=='T') //找到出口
 {
  flag=1;
  return;
 }
  for(int i=0;i<4;i++) //搜索路徑
  {
   int h=x+sdep_x[i];
   int l=y+sdep_y[i];
   if(a[h][l]!='*'&&!vis[h][l]&&h>=0&&h<n&&l>=0&&l<m)//搜索路徑的條件
   {
    dfs(h,l);
   }
  }
}

int main()
{
 while(cin>>n>>m)
 {
  memset(vis,0,sizeof(vis));//初始化數(shù)組
  flag=0;
  int f,g;
  for(int i=0;i<n;i++)
   for(int j=0;j<m;j++) 
    cin>>a[i][j];
  for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
   {
    if(a[i][j]=='S')//先找到路口
    {
     f=i;
     g=j;
    }
   }
  dfs(f,g);
  if(flag)
   cout<<"YES"<<endl;
  else
   cout<<"NO"<<endl;
 }
 return 0;
}

第二種方法廣度優(yōu)先搜索:這一步之后,把接下來一步的所有路都列出來,在之后的所有擴(kuò)展之中,在以一個(gè)為下一步,再將所有的該步可以到達(dá)的下一步,全部列舉出來,再將第二步的其他選擇中的每一步,都一一做擴(kuò)展,每次擴(kuò)展,都要檢查所擴(kuò)展的地方有沒有到達(dá)搜索的要求。
可以定義一個(gè)隊(duì)列,將擴(kuò)展的點(diǎn)位置保存在隊(duì)列,將擴(kuò)展完畢的點(diǎn)出隊(duì)

#include<bits/stdc++.h>
using namespace std;
int vis[20][20];
char a[20][20];
int n,m;
int step_x[4]={-1,1,0,0},step_y[4]={0,0,-1,1};
struct data//定義一個(gè)結(jié)構(gòu)體,里面包含x,y成員                                                         
{
 int x;
 int y;
};
data s,p;//定義兩個(gè)結(jié)構(gòu)體變量
queue<data>q;//定義一個(gè)隊(duì)列q
int BFS()
{
 while(!q.empty())//當(dāng)隊(duì)列不為空時(shí)
 {
  p=q.front();//返回隊(duì)列的第一個(gè)元素
  vis[p.x][p.y]=1;
  q.pop();//刪除隊(duì)列中最靠前的元素
  if(a[p.x][p.y]=='T')//如果找到出口
   return 1;
  else
  {
   for(int i=0;i<4;i++)
   {
    s.x=p.x+step_x[i];
    s.y=p.y+step_y[i];
    if(s.x>=0&&s.x<n&&s.y>=0&&s.y<m&&!vis[s.x][s.y]&&a[s.x][s.y]!='*')//搜索條件
     q.push(s);//將擴(kuò)展的點(diǎn)的位置存入隊(duì)尾
   }
  }
 }
 return 0;
}
int main()
{
 while(cin>>n>>m)
 {
  while(!q.empty())
  {
   q.pop();//清空隊(duì)列中的元素
  }
  for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
   cin>>a[i][j];
   for(int i=0;i<n;i++)
   {
   for(int j=0;j<m;j++)
   {
    vis[i][j]=0;
    if(a[i][j]=='S')
    {
     s.x=i;
     s.y=j;
     q.push(s);//將路口的位置保存在隊(duì)尾
    }
   }
   }
   if(BFS())
   cout<<"YES"<<endl;
   else
   cout<<"NO"<<endl;

 }
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++基礎(chǔ)之this指針與另一種“多態(tài)”

    C++基礎(chǔ)之this指針與另一種“多態(tài)”

    this指針識(shí)別了同一個(gè)類的不同的對象,換句話說,this指針使得成員函數(shù)可以訪問同一個(gè)類的不同對象。再深入一點(diǎn),this指針使得成員函數(shù)會(huì)因?yàn)閠his指針的不同而訪問到了不同的成員變量
    2013-07-07
  • C++多態(tài)虛析構(gòu)和純虛析構(gòu)的實(shí)現(xiàn)

    C++多態(tài)虛析構(gòu)和純虛析構(gòu)的實(shí)現(xiàn)

    本文主要介紹了C++多態(tài)虛析構(gòu)和純虛析構(gòu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 基于C語言代碼實(shí)現(xiàn)掃雷游戲

    基于C語言代碼實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言代碼實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++ 中動(dòng)態(tài)鏈接庫--導(dǎo)入和導(dǎo)出的實(shí)例詳解

    C++ 中動(dòng)態(tài)鏈接庫--導(dǎo)入和導(dǎo)出的實(shí)例詳解

    這篇文章主要介紹了C++ 中動(dòng)態(tài)鏈接庫--導(dǎo)入和導(dǎo)出的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • C++類的繼承和派生及指針安全引用

    C++類的繼承和派生及指針安全引用

    這篇文章主要介紹了C++類的繼承和派生及指針安全引用,繼承指從現(xiàn)有類獲得其特性,派生指從已有類產(chǎn)生新的類,指針和引用并存,二者似乎有很多相同點(diǎn),但是又不完全相同,下面關(guān)于兩者的相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • opencv3/C++ 直方圖反向投影實(shí)例

    opencv3/C++ 直方圖反向投影實(shí)例

    今天小編就為大家分享一篇opencv3/C++ 直方圖反向投影實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++ opencv實(shí)現(xiàn)的把藍(lán)底照片轉(zhuǎn)化為白底照片功能完整示例

    C++ opencv實(shí)現(xiàn)的把藍(lán)底照片轉(zhuǎn)化為白底照片功能完整示例

    這篇文章主要介紹了C++ opencv實(shí)現(xiàn)的把藍(lán)底照片轉(zhuǎn)化為白底照片功能,結(jié)合完整實(shí)例形式詳細(xì)分析了C++使用opencv模塊進(jìn)行圖片轉(zhuǎn)換操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • vs code 配置c/c++環(huán)境的詳細(xì)教程(推薦)

    vs code 配置c/c++環(huán)境的詳細(xì)教程(推薦)

    這篇文章主要介紹了vs code 配置c/c++環(huán)境的詳細(xì)教程(推薦),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息

    C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息

    這篇文章主要介紹利用C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息,文章舉例說明并附有詳細(xì)代碼,需要的朋友可以參考一下
    2021-10-10
  • OpenCV實(shí)現(xiàn)圖像拼接案例

    OpenCV實(shí)現(xiàn)圖像拼接案例

    這篇文章主要介紹了OpenCV實(shí)現(xiàn)圖像拼接案例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08

最新評論

马公市| 石阡县| 冀州市| 南宫市| 逊克县| 永平县| 仙游县| 阳信县| 醴陵市| 汕头市| 鹤峰县| 定安县| 湘乡市| 十堰市| 高密市| 龙口市| 延寿县| 陵川县| 墨竹工卡县| 涿鹿县| 汽车| 呼图壁县| 周宁县| 敖汉旗| 汉中市| 刚察县| 郓城县| 和林格尔县| 塘沽区| 洛扎县| 常宁市| 邯郸县| 秭归县| 抚顺县| 巫溪县| 日照市| 靖边县| 临澧县| 彰化市| 绥江县| 商河县|