栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 2537 Collect More Jewels

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 2537 Collect More Jewels

#include <iostream>#include <queue>#include <cstdio>#include <cstring>using namespace std;const int maxn=55;const int INF=1e8;struct node{    int x,y;    int num;};int vis[maxn][maxn];int n,m,t,l,ans,sum;int val[11];int path[12][12],mark[12];int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};char e[maxn][maxn];void bfs(int x,int y,int from){    memset(vis,0,sizeof(vis));    vis[x][y]=1;    int i,j,k;    node f,g;    queue<node>q;    f.x=x;f.y=y;f.num=0;    q.push(f);    while(!q.empty())    {        f=q.front();        q.pop();        for(i=0;i<4;i++)        { g.x=f.x+dir[i][0]; g.y=f.y+dir[i][1]; if(g.x<0||g.y<0||g.x>=n||g.y>=m||e[g.x][g.y]=='*'||vis[g.x][g.y])continue; vis[g.x][g.y]=1; g.num=f.num+1; if(e[g.x][g.y]!='.') {     if(e[g.x][g.y]=='@')path[from][0]=g.num;     else if(e[g.x][g.y]=='<')path[from][l+1]=g.num;     else path[from][e[g.x][g.y]-'A'+1]=g.num; } q.push(g);        }    }}void dfs(int pre,int time,int value){    if(time>t||ans==sum)return ;    if(pre==l+1)    {        ans=max(ans,value);        return ;    }    for(int i=1;i<=l+1;i++)    {        if(mark[i])continue;        mark[i]=1;        dfs(i,time+path[pre][i],value+val[i-1]);        mark[i]=0;    }}int main(){    int T,tt=0;    scanf("%d",&T);    while(T--)    {        int i,j,k;        sum=0;        scanf("%d%d%d%d",&m,&n,&t,&l);        for(i=0;i<l;i++){scanf("%d",&val[i]);sum+=val[i];}        val[l]=0;        for(i=0;i<n;i++)scanf("%s",e[i]);        for(i=0;i<=l+1;i++)        { for(j=0;j<=l+1;j++)     path[i][j]=INF;        }        for(i=0;i<n;i++)        { for(j=0;j<m;j++) {     if(e[i][j]=='@')bfs(i,j,0);     if(e[i][j]=='<')bfs(i,j,l+1);     if(e[i][j]<='J'&&e[i][j]>='A')bfs(i,j,e[i][j]-'A'+1); }        }        ans=-1;        memset(mark,0,sizeof(mark));        dfs(0,0,0);        printf("Case %d:n",++tt);        if(ans==-1)printf("Impossiblen");        else printf("The best score is %d.n",ans);        if(T!=0)printf("n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367763.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号