博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ1066
阅读量:4204 次
发布时间:2019-05-26

本文共 2238 字,大约阅读时间需要 7 分钟。

////  main.cpp//  dfs-bfs搜索////  Created by liuzhe on 16/8/10.//  Copyright © 2016年 my_code. All rights reserved.//#include 
#include
#include
#include
#include
using namespace std;char map[20][20]; //记录地图int vis[20][20]; //访问标记int dir[4][2] = {0,1,0,-1,1,0,-1,0}; //四个方向int n; //行和列int ans; //记录走过的字母个数struct state{ int x,y; //记录坐标 int count; //记录步数 char c; //字符}sta[600];int res = 0; //记录最后的答案int check(state s, char c){ if ( vis[s.x][s.y] == 0 && s.x >= 0 &&s.x < n && s.y >= 0 && s.y < n && (s.c =='.'||(s.c <= c && s.c >= 'A' && s.c <= 'Z'))) //判断可以不可以走 { return 1; } else { return 0; }}void bfs(state s,char c) //bfs算法{ queue
q; //定义队列 state now,next; //现在的 和下一个 s.count = 0; //初始化步数 q.push(s); //入队 vis[s.x][s.y] = 1; while (!q.empty()) { now = q.front(); //队首元素 q.pop(); //出队 if (now.c == c ) //如果走到目标字母 { ans++; res += now.count; //结果加上走的步数 map[now.x][now.y] = '.'; //然后走过的字母变为'.' now.count = 0; next.count = 0; memset(vis,0,sizeof(vis)); //初始化走过的路 return ; } for ( int i = 0 ; i < 4 ;i++) { next.x = now.x + dir[i][0]; next.y = now.y + dir[i][1]; next.count = now.count + 1; //四个方向 next.c = map[next.x][next.y]; if (check(next , c)) { q.push(next); //如果符合条件,入队 vis[next.x][next.y] = 1; //访问过了 不再访问 } } } return; //如果无路可走 退出}int main(){ int t; scanf("%d",&t); int temp[26]; for (int cas = 1 ; cas <= t ; cas ++ ) { memset(vis,0,sizeof(vis)); res = 0; ans = 1; scanf("%d",&n); getchar(); int k = 0; int l = 0; for (int i = 0 ; i < n ; i++ ) { for ( int j = 0 ; j < n ; j++ ) { scanf("%c",&sta[l].c); map[i][j] = sta[l].c; //结构数组的字符 sta[l].x = i; sta[l].y = j; if (sta[l].c >= 'A' && sta[l].c <= 'Z') { temp[sta[l].c-'A'] = l; k++; //字母总个数 } l++; //结构数组的下标 } getchar(); } for (int i = 1 ; i < k ; i++ ) { //printf("%c\n",sta[temp[i-1]].c); bfs(sta[temp[i-1]],('A' + i)); //记录A 到B的路径 然后再B到C 的路径,直到最后一个 if ( ans < i ) break; } if (ans == k && k > 0) //如果字母全部走过了 { printf("Case %d: %d\n",cas, res); } else { printf("Case %d: Impossible\n",cas); //没有走遍所有的字母 } if ( cas != t) getchar(); } return 0;}

转载地址:http://inali.baihongyu.com/

你可能感兴趣的文章
关于对SQL注入80004005 及其它错误消息分析
查看>>
即时通软件性能测试(与宴宾的对话)
查看>>
应用软件性能测试的艺术(翻译)——序
查看>>
高级性能测试(翻译)
查看>>
Web安全测试解决方案
查看>>
今天开始上班
查看>>
开源测试研究方案泡汤了
查看>>
晒一下我培训的课程——应用系统性能测试规划、实施与分析
查看>>
利用 STAF 实现程序更新包的自动部署测试
查看>>
周末参加“北京干部管理职业技术学院”关于高职课程改革的专家讨论会
查看>>
软件自动化测试框架的发展
查看>>
实现haproxy+LNMT负载均衡架构
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
查看>>
论文浅尝 | GMNN: Graph Markov Neural Networks
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>