前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2018年长沙理工大学第十三届程序设计竞赛

2018年长沙理工大学第十三届程序设计竞赛

作者头像
用户2965768
发布2018-08-30 16:42:39
3050
发布2018-08-30 16:42:39
举报
文章被收录于专栏:wymwym

点击打开链接

#include <bits/stdc++.h>

using namespace std;

const int N=5e2+66;

int visit[N][N][2];

char mp[N][N];

int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

struct node{

int x,y;

int flag,step;

};

int n,m;

int dfs(int x,int y)

{

int tx,ty;

memset(visit,0,sizeof(visit));

queue<node> que;

node tmp; tmp.x=x; tmp.y=y; tmp.flag=0; tmp.step=0;

visit[x][y][tmp.flag]=1; que.push(tmp);

while(!que.empty())

{

node q=que.front();

que.pop();

if(mp[q.x][q.y]== 'E')return q.step;

for(int i=0;i<4;i++)

{

tx=q.x+dir[i][0];

ty=q.y+dir[i][1];

if(tx>=0&&tx<n&&ty>=0&&ty<m&&mp[tx][ty]!='#')

{

node tp;

if(mp[tx][ty]=='K')

tp.flag=1;

else tp.flag=q.flag;

if(visit[tx][ty][tp.flag])continue;

visit[tx][ty][tp.flag]=1;

if(mp[tx][ty]== 'E'&&!visit[tx][ty][1])

continue;

tp.x=tx;

tp.y=ty;

tp.step=q.step + 1;

que.push(tp);

}

}

}

return -1;

}

int main()

{

int t;

int i,j;

cin>>t;

while(t--)

{

int tx,ty,ans;

cin>>n>>m;

getchar();

for(i=0;i<n;i++)

for(j=0;j<m;j++)

{

scanf("%c",&mp[i][j]);

if(mp[i][j]=='P')

{

tx=i; ty=j;

}

if(i!=n-1&&j==m-1)getchar();

}

ans=dfs(tx,ty);

if(ans==-1)

printf("No solution\n");

else printf("%d\n",ans);      

}

return 0;

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年04月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档