創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

小編這次要給大家分享的是C語言如何實現(xiàn)走迷宮,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
描述
給一張個迷宮,問能否從起點走到終點,只能往上下左右走,不能斜著走
輸入
多組測試數(shù)據(jù),每組第一行兩個正整數(shù),分別為n和m
表示n這個迷宮有n行m列(0<n,m<10)
接著是n行m列,
'#'表示路
‘*'表示墻
‘S'表示起點
‘T'表示終點
輸出
每組測試數(shù)據(jù)輸出一個結(jié)果,如果能從S走到T,輸出“YES”,否則輸出“NO”
輸入樣例:
2 2
S*
#T
3 3
S*#
#T
##
輸出樣例:
YES
NO
有兩種方法可以解決這個問題
第一種深度優(yōu)先搜索:站在入口,考慮自己下一步可以走哪里,走到下一個位置后,再考慮下一步怎么走,一直走下去,直到?jīng)]有路,然后再返回最近的一個岔路口,選其它任一條沒試過的路,如果不能走,再嘗試其他的路,直到這個岔路口的路全部試完,再回到上一個路口,看是否能走到出口,相當于一條路走到黑
#include<bits/stdc++.h>
using namespace std;
char a[20][20]; //存儲迷宮字符數(shù)組
int flag,m,n;
int sdep_x[4]={-1,1,0,0},sdep_y[4]={0,0,-1,1};//控制上下左右方向
int vis[20][20]; //標記走過的路
void dfs(int x,int y)
{
vis[x][y]=1; //代表被標記過了
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;
}
當前標題:C語言如何實現(xiàn)走迷宮-創(chuàng)新互聯(lián)
當前地址:http://www.chinadenli.net/article28/iehjp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、標簽優(yōu)化、網(wǎng)站維護、建站公司、網(wǎng)站營銷、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)