CDOJ 搜索专题训练A
来源:互联网 发布:曼彻斯特 知乎 编辑:程序博客网 时间:2024/06/06 21:06
#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}#define MAXN 200550char G[55][55];int vis[55][55];int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};struct special{ int x1,y1;//对应传送点 int x2,y2;}trans[30];struct node{ int x, y; int dist;}q[MAXN];int start_x,start_y;int end_x,end_y;int ans;int sym[30];int N,M;void read(){ memset(sym,0,sizeof(sym)); scanf("%d%d",&N,&M); for (int i=0;i<N;i++) { getchar(); for (int j=0;j<M;j++) { scanf("%c",&G[i][j]); if (islower(G[i][j])) { if (!sym[G[i][j]-'a']) { trans[G[i][j]-'a'].x1=i; trans[G[i][j]-'a'].y1=j; sym[G[i][j]-'a']=1; } else { trans[G[i][j]-'a'].x2=i; trans[G[i][j]-'a'].y2=j; } } if (G[i][j]=='L') {start_x=i;start_y=j;} if (G[i][j]=='Q') {end_x=i;end_y=j;} } } // printf("%d %d %d %d\n",start_x,start_y,end_x,end_y); // for (int i=0;i<26;i++)if (sym[i]) printf("%d %d %d %d\n",trans[i].x2,trans[i].y2,trans[i].x1,trans[i].y1);}void bfs(){ memset(vis,0,sizeof(vis)); int front=0,rear=1; q[0].x=start_x;q[0].y=start_y; q[0].dist=0; vis[start_x][start_y]=1; node s,u; while (front<rear) { u=q[front]; //printf("%d %d %d\n",u.x,u.y,u.dist); if (u.x==end_x && u.y==end_y) { ans=u.dist; return ; } for (int d=0;d<4;d++) { int nx=u.x+dx[d]; int ny=u.y+dy[d]; if (nx>=0 && nx<N && ny>=0 && ny<M && !vis[nx][ny] && G[nx][ny]!='#') { if (islower(G[nx][ny])) { int index=G[nx][ny]-'a'; if (nx==trans[index].x1 && ny==trans[index].y1) { s.x=trans[index].x2;s.y=trans[index].y2; s.dist=u.dist+1; q[rear++]=s; } else { s.x=trans[index].x1;s.y=trans[index].y1; s.dist=u.dist+1; q[rear++]=s; } } else { s.x=nx;s.y=ny; s.dist=u.dist+1; vis[nx][ny]=1; q[rear++]=s; } } } front++; } ans=-1;}int main(){ //freopen("sample.txt","r",stdin); int T; scanf("%d",&T); while (T--) { ans=0; read(); bfs(); printf("%d\n",ans); } return 0;}
0 0
- CDOJ 搜索专题训练A
- CDOJ 训练搜索专题G 八数码固定终点问题
- 搜索专题训练(2)
- 搜索专题训练hdu1043Eight
- 暑假训练1-搜索专题
- 搜索专题训练hdu1455 Sticks
- 搜索专题 A
- 搜索专题训练【CSUST_Newer_12级入门】
- 搜索专题训练hdu1175连连看
- 搜索专题训练hdu2510符号三角形
- 搜索专题: HDU2102 A计划
- CDOJ 数据结构训练K
- CDOJ 数据结构训练 J
- CDOJ 数据结构训练 E
- UESTC 数据结构专题训练 A,B,C
- SDAU 搜索专题 13 A strange lift
- 搜索专题训练hdu4403A very hard Aoshu problem
- 【裸线段树】Uestc-数据结构专题训练【A】
- 全概率公式
- ArcEngine下TIN生成等高线
- 成佩涛编程之路——MySQL除法精度问题
- 编译器与解释器
- 自主开发的3D打印软件
- CDOJ 搜索专题训练A
- Change the xterm background color for ICEWM
- TCP与UDP的区别
- The method consume(HttpEntity) is undefined for the type EntityUtils
- Python的包管理器工具pip的使用手册
- CDOJ 训练搜索专题G 八数码固定终点问题
- myeclipse 10的bug
- 三种JDBC批量插入编程方法的比较
- JavaScript constructor属性