hdu1010(小狗逃迷宫)
生活随笔
收集整理的這篇文章主要介紹了
hdu1010(小狗逃迷宫)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:在一個迷宮中有一只小狗和一根骨頭,然后在T分鐘的時候恰好迷宮的出口會打開,然后問小狗是否能在第T分鐘的時候到達出口離開迷宮。
小狗可以向上下左右四個方向移動,然后小狗不能走回頭路,即已經走過了的路就不能再走,并且小狗只能一直走,不能停下來。
c++:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,m,t,flag,ex,ey,sx,sy; char a[10][10],b[10][10]; void dfs(int i,int j); void search1(int i,int j) {if(a[i][j]!='X'&&b[i][j]!=1&&i<n&&i>=0&&j<m&&j>=0){b[i][j]=1;t--;dfs(i,j);if(flag==1) return ;b[i][j]=0;t++;} } void dfs(int i,int j) {if(flag==1) return ;if(i==ex&&j==ey){if(t==0)flag=1;return ;}if(t<abs(ex-i)+abs(ey-j)||(t-abs(ex-i)+abs(ey-j))%2)//剪枝,若與終點的距離大于時間或者return ;search1(i,j+1);search1(i,j-1);search1(i-1,j);search1(i+1,j);return ; } int main() {while(scanf("%d%d%d",&n,&m,&t)!=EOF){if(n==0&&m==0&&t==0)break;memset(a,0,sizeof(a));memset(b,0,sizeof(b));flag=0;for(int i=0;i<n;i++)scanf("%s",&a[i]);for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(a[i][j]=='S')sx=i,sy=j;else if(a[i][j]=='D')ex=i,ey=j;}b[sx][sy]=1;dfs(sx,sy);if(flag==1)cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0; }傳送門:迷宮類型深搜(dfs,深度優先搜索)
轉載于:https://www.cnblogs.com/wangtao971115/p/10358407.html
總結
以上是生活随笔為你收集整理的hdu1010(小狗逃迷宫)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pmd代码安全扫描工具
- 下一篇: requests发送http请求