码迷,mamicode.com
首页 > 其他好文 > 详细

uva 1600

时间:2017-04-26 23:02:02      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:class   个数   div   int   --   nbsp   set   const   oid   

没有想到第三维的数组,第三维区分同一个位置是否是穿墙到达的,很神奇,还有就是略微的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

标签:class   个数   div   int   --   nbsp   set   const   oid   

原文地址:http://www.cnblogs.com/Wangwanxiang/p/6771391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!