欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點(diǎ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)椴皇擎湵?,用head來表示第一個 
  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)??

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

上一篇:用C語言模仿Python函數(shù)的一種簡單實(shí)現(xiàn)方法

欄    目:C語言

下一篇:C++中發(fā)聲函數(shù)Beep用法

本文標(biāo)題:C++ 實(shí)例之九宮格廣度優(yōu)先遍歷

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1595.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有