首页 > 代码库 > uva 1600
uva 1600
没有想到第三维的数组,第三维区分同一个位置是否是穿墙到达的,很神奇,还有就是略微的dp思想没想到,同一个数组也是需要取最小值的
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=25; int dict[6][3]={{1,0},{0,1},{-1,0},{0,-1}}; int mapp[maxn][maxn]; int dp[maxn][maxn][maxn]; int t,m,n,k,ans; void dfs(int x,int y,int step,int wall) { if(x==m&&y==n) { ans=min(ans,step); return ; } for(int i=0;i<4;i++) { int xx=x+dict[i][0]; int yy=y+dict[i][1]; int st=wall; if(mapp[xx][yy]==1) st++; else st=0; if(xx>=1&&xx<=m&&yy>=1&&yy<=n) { if((dp[xx][yy][st]<0||dp[xx][yy][st]>step+1)&&st<=k) { dp[xx][yy][st]=step+1; dfs(xx,yy,step+1,st); } } } return ; } int main() { scanf("%d",&t); while(t--) { ans=1<<30; scanf("%d%d%d",&m,&n,&k); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&mapp[i][j]); memset(dp,-1,sizeof(dp)); dfs(1,1,0,0); if(ans==1<<30) printf("-1\n"); else printf("%d\n",ans); } return 0; }
uva 1600
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。