日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

36.迷宫(广度优先搜索)

發布時間:2025/6/17 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 36.迷宫(广度优先搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


時間限制: 1 s

?空間限制: 128000 KB

?題目等級 : 黃金 Gold

題解

題目描述?Description

在N*N的迷宮內,“#”為墻,“.”為路,“s”為起點,“e”為終點,一共4個方向可以走。從左上角((0,0)“s”)位置處走到右下角((n-1,n-1)“e”)位置處,可以走通則輸出YES,不可以走則輸出NO。

輸入描述?Input Description

輸入的第一行為一個整數m,表示迷宮的數量。?
其后每個迷宮數據的第一行為一個整數n(n≤16),表示迷宮的邊長,接下來的n行每行n個字符,字符之間沒有空格分隔。

輸出描述?Output Description

輸出有m行,每行對應的迷宮能走,則輸出YES,否則輸出NO。

樣例輸入?Sample Input

1
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e

樣例輸出?Sample Output

YES

代碼:

(使用遞歸回溯)超時程序:

#include

using namespace std;

#include

#include

int m,p[17][17];

int xx[4]={1,-1,0,0};

int yy[4]={0,0,1,-1};int flag;

void search(int xq,int yq,int xz,int yz,int n)

{

?????? if(xq==xz&&yq==yz)

?????? {

????????????? flag=1;

????????????? return;

?????? }

?????? for(int i=0;i<=3;++i)

?????? {

????????????? int x1=xq+xx[i],y1=yq+yy[i];

????????????? if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&p[x1][y1]==0)

????????????? {

???????????????????? p[x1][y1]=1;

???????????????????? search(x1,y1,xz,yz,n);

???????????????????? p[x1][y1]=0;

???????????????????? if(flag==1)

???????????????????? return;

????????????? }

?????? }

}

?

int main()

{

?????? scanf("%d",&m);

?????? for(int i=1;i<=m;++i)

?????? {

????????????? int n,xq,yq,xz,yz;

????????????? scanf("%d",&n);

????????????? flag=0;

????????????? char bz[17];

????????????? memset(p,0,sizeof(p));

????????????? for(int j=1;j<=n;++j)

????????????? {

???????????????????? scanf("%s",bz+1);

????????????? ??? for(int l=1;l<=n;++l)

???????????????????? {

??????????????????????????? if(bz[l]=='#')

??????????????????????????? p[j][l]=1;

??????????????????????????? if(bz[l]=='.')

??????????????????????????? p[j][l]=0;

??????????????????????????? if(bz[l]=='s')

??????????????????????????? {

?????????????????????????????????? p[j][l]=0;

?????????????????????????????????? xq=l;yq=j;

??????????????????????????? }

????????????? ????????????? if(bz[l]=='e')

??????????????????????????? {

?????????????????????????????????? p[j][l]=0;

?????????????????????????????????? xz=l;

?????????????????????????????????? yz=j;

??????????????????????????? }

???????????????????? }????

????????????? ?

????????????? ? }?

????????????? ?

????????????? search(xq,yq,xz,yz,n);

????????????? if(flag==1)

????????????? printf("YES\n");

????????????? else printf("NO\n");

?????????????

?????? }

?????? return 0;

}

AC程序:(廣搜加隊列):

#include

using namespace std;

#include

#include

int d[17*17][2]={0},head,tail,mg[17][17]={0};

int xx[]={0,0,1,-1};

int yy[]={1,-1,0,0},m;

int search(int n,int xz,int yz)

{

?????? head=0;tail=1;

?????? memset(d,0,sizeof(d));

?????? d[tail][0]=1;d[tail][1]=1;

?????? mg[1][1]=1;

?????? while(head

?????? {

????????????? ++head;

????????????? int x1=d[head][0],y1=d[head][1];

????????????? if(x1==xz&&y1==yz)

????????????? return 1;

????????????? for(int i=0;i<=3;++i)

????????????? {

???????????????????? int x=x1+xx[i],y=y1+yy[i];

???????????????????? if(x>=1&&x<=n&&y>=1&&y<=n&&mg[x][y]==0)

???????????????????? {

??????????????????????????? ++tail;

??????????????????????????? d[tail][0]=x;

??????????????????????????? d[tail][1]=y;

??????????????????????????? mg[x][y]=1;

???????????????????? }

????????????? }

?????? }

?????? return 0;

}

void input()

{

?????? char p[17];

?????? scanf("%d",&m);

?????? int xq=1,xz,n,yq=1,yz;

?????? mg[1][1]=1;

?????? for(int i=1;i<=m;++i)

?????? {

????????????? scanf("%d",&n);

????????????? xz=n;yz=n;

?????? ? for(int l=1;l<=n;++l)

?????? ? {

????????????? scanf("%s",p+1);

?????????????

????????????? for(int j=1;j<=n;++j)

????????????? {

???????????????????? if(p[j]=='#')

???????????????????? mg[l][j]=1;

????????????? }

?????? ?}???

?????? ??? int flag=search(n,xz,yz);

????????????? if(flag==1) printf("YES\n");

????????????? else printf("NO\n");

?????? }

}

int main()

{

?????? input();

?????? return 0;

}

轉載于:https://www.cnblogs.com/csgc0131123/p/5290451.html

總結

以上是生活随笔為你收集整理的36.迷宫(广度优先搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。