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

C++ 實(shí)例之九宮格廣度優(yōu)先遍歷

 更新時(shí)間:2017年05月09日 08:47:30   投稿:lqh  
這篇文章主要介紹了C++ 實(shí)例之九宮格廣度優(yōu)先遍歷的相關(guān)資料,需要的朋友可以參考下

C++ 實(shí)例之九宮格廣度優(yōu)先遍歷

基本思路:

廣度優(yōu)先遍歷,每次找到1的位置,分別向上、向下、向左、向右移動。把移動后的每個狀態(tài)存儲到隊(duì)列中,彈出隊(duì)頭,判斷是否為最終結(jié)果狀態(tài),如果是,輸出遍歷的層數(shù)(即移動步數(shù)),如果不是,把現(xiàn)階段狀態(tài)繼續(xù)執(zhí)行找到1向上向下向左向右移動操作。

#include<stdio.h> 
 
typedef struct MyType 
{ 
  int number[3][3];int level; 
}MyType; 
 
MyType queue[10000]; 
 
MyType GetHead(int n) 
{ 
  return queue[n]; 
} 
 
//是否為最終結(jié)果狀態(tài) 
int IsFind(MyType cur) 
{ 
  int flag=1; 
  for(int i=0;i<3;i++) 
    for(int j=0;j<3;j++) 
    { 
      if(cur.number[i][j]!=3*i+j+1) 
      { 
        flag=0; 
        break; 
      } 
    } 
  return flag; 
} 
 
int main() 
{ 
   
  int cnt=0;//隊(duì)列中數(shù)量 
  int flag=0;//是否尋找到標(biāo)記 
  int ans=0;//最小步數(shù),也是擴(kuò)展的層數(shù) 
  int head=0;//因?yàn)椴皇擎湵恚胔ead來表示第一個 
  for(int m=0;m<3;m++) 
  { 
    for(int n=0;n<3;n++) 
    { 
      scanf("%d",&queue[cnt].number[m][n]); 
    } 
  } 
  queue[cnt].level=0; 
  cnt++; 
  while(cnt!=0) 
  { 
    //出站 
    MyType cur=GetHead(head++); 
    //判斷是否為最終狀態(tài) 
    flag=IsFind(cur); 
    if(flag==1) 
    { 
      printf("最小步數(shù)為:%d\n",cur.level); 
      break; 
    } 
    else   //不為最終狀態(tài),進(jìn)行擴(kuò)展 
    { 
      for(int row=0;row<3;row++) 
        for(int col=0;col<3;col++) 
        { 
          if(cur.number[row][col]==1)  //找到1,進(jìn)行擴(kuò)展 
          { 
            //將1向上移 
            if(row!=0) 
            { 
              MyType temp=cur; 
              temp.number[row][col]=temp.number[row-1][col]; 
              temp.number[row-1][col]=1; 
              temp.level=cur.level+1; 
              queue[cnt++]=temp; 
            } 
            //將1向右移動 
            if(col!=2) 
            { 
              MyType temp=cur; 
              temp.number[row][col]=temp.number[row][col+1]; 
              temp.number[row][col+1]=1; 
              temp.level=cur.level+1; 
              queue[cnt++]=temp; 
            } 
            //將1向下移動 
            if(row!=2) 
            { 
              MyType temp=cur; 
              temp.number[row][col]=temp.number[row+1][col]; 
              temp.number[row+1][col]=1; 
              temp.level=cur.level+1; 
              queue[cnt++]=temp; 
            } 
            //將1向左移動 
            if(col!=0) 
            { 
              MyType temp=cur; 
              temp.number[row][col]=temp.number[row][col-1]; 
              temp.number[row][col-1]=1; 
              temp.level=cur.level+1; 
              queue[cnt++]=temp; 
            } 
          } 
        } 
    } 
  } 
  return 0; 
} 



有個問題,就是還沒弄懂,怎么判斷給定初始狀態(tài)無解,即不可能到達(dá)最終結(jié)果狀態(tài)??

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C語言近萬字為你講透棧和隊(duì)列

    C語言近萬字為你講透棧和隊(duì)列

    對于線性表,我們可能要執(zhí)行下列操作:訪問表的第k個結(jié)點(diǎn)、在k這個結(jié)點(diǎn)之前或者之后插入一個新結(jié)點(diǎn),抑或是刪除第k個結(jié)點(diǎn)等等操作,其中我們會遇到值對第一個或者最后一個結(jié)點(diǎn)插入、刪除、和訪問值的線性表,我們給它們以特殊的名稱:棧、隊(duì)列、雙端隊(duì)列
    2022-05-05
  • C語言用函數(shù)指針實(shí)現(xiàn)一個特別的計(jì)算器

    C語言用函數(shù)指針實(shí)現(xiàn)一個特別的計(jì)算器

    函數(shù)指針是一個指針變量,它可以存儲函數(shù)的地址,然后使用函數(shù)指針,下面這篇文章主要給大家介紹了關(guān)于C語言用函數(shù)指針實(shí)現(xiàn)計(jì)算器的方法,需要的朋友可以參考下
    2022-07-07
  • QSS樣式表實(shí)現(xiàn)界面換膚功能

    QSS樣式表實(shí)現(xiàn)界面換膚功能

    這篇文章主要介紹了QSS樣式表實(shí)現(xiàn)界面換膚功能,對QSS樣式表進(jìn)行簡單介紹,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 聊聊Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題

    聊聊Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題

    這篇文章主要介紹了Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題,給大家介紹了圖像的克隆及拷貝問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • VC實(shí)現(xiàn)獲取當(dāng)前正在運(yùn)行的進(jìn)程

    VC實(shí)現(xiàn)獲取當(dāng)前正在運(yùn)行的進(jìn)程

    這篇文章主要介紹了VC實(shí)現(xiàn)獲取當(dāng)前正在運(yùn)行的進(jìn)程,涉及VC針對系統(tǒng)進(jìn)程的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • C++實(shí)現(xiàn)LeetCode(42.收集雨水)

    C++實(shí)現(xiàn)LeetCode(42.收集雨水)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(42.收集雨水),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C#開源類庫SimpleTCP使用方法

    C#開源類庫SimpleTCP使用方法

    SimpleTCP內(nèi)部有一個特殊字符分割字符串的協(xié)議可以直接使用,也可以在DataReceived事件處理程序中實(shí)現(xiàn)自己的協(xié)議,這篇文章主要介紹了C#開源類庫SimpleTCP的使用方法,需要的朋友可以參考下
    2021-09-09
  • ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    這篇文章主要介紹了ubuntu 下編譯C++代碼出現(xiàn)的問題解決的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • C?C++輸入輸出基礎(chǔ)教程示例詳解

    C?C++輸入輸出基礎(chǔ)教程示例詳解

    當(dāng)我們在網(wǎng)站做題的時(shí)候經(jīng)常會遇到各種要求的輸入輸出,而且會有時(shí)間超限等多個問題,這時(shí)我們就要優(yōu)化我們的輸入輸出或者規(guī)范我們的輸入輸出格式,下面介紹C和C++中的輸入輸出問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-11-11
  • 示例詳解C++語言中的命名空間 (namespace)

    示例詳解C++語言中的命名空間 (namespace)

    C++名字空間是一種描述邏輯分組的機(jī)制,也就是說,如果有一些聲明按照某種準(zhǔn)則在邏輯上屬于同一個模塊,就可以將它們放在同一個名字空間,以表明這個事實(shí),這篇文章主要給大家介紹了關(guān)于C++語言中命名空間 (namespace)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評論

龙川县| 舞钢市| 平山县| 射洪县| 沂源县| 县级市| 衢州市| 西昌市| 雅江县| 江孜县| 瑞丽市| 仲巴县| 开阳县| 涟源市| 桃源县| 屏东市| 苏尼特右旗| 调兵山市| 永安市| 眉山市| 岳阳市| 容城县| 陇西县| 大宁县| 盐池县| 余庆县| 昌邑市| 新郑市| 徐汇区| 宜兰县| 津南区| 濉溪县| 师宗县| 农安县| 长宁县| 延吉市| 沁水县| 尉氏县| 清涧县| 金湖县| 雷州市|