• 题意:给你一张图,\(S\)表示起点,\(G\)表示终点,\(.\)表示可以走,#表示不能走,小写字母可以传送到任意一个相同的字母的位置,问从\(S\)走到\(G\)的最小步数.
  • 题解:假如不考虑字母的话,就是一个经典的bfs,当我们走到字母时,将其它相同字母的位置入队,之后就不会再将它们入队了,因为之后走到这个字母的步数一定大于第一次传送的步数,所以我们可以先记录每个字母的位置,然后跑个bfs即可.
  • 代码:
struct misaka{
int x,y;
int cnt;
}e[N]; int n,m;
char s[2100][2100];
bool st[2100][2100];
vector<PII> v[30];
PII stt;
const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
bool c[30]; void bfs(){
queue<misaka> q;
q.push({stt.fi,stt.se,0});
bool flag=false;
while(!q.empty()){
auto tmp=q.front();
q.pop();
int x=tmp.x;
int y=tmp.y;
int cnt=tmp.cnt; if(st[x][y]) continue;
st[x][y]=true; if(s[x][y]=='G'){
flag=true;
cout<<cnt;
break;
} if(s[x][y]>='a' && s[x][y]<='z' && !c[s[x][y]-'a']){
for(auto w : v[s[x][y]-'a']){
q.push({w.fi,w.se,cnt+1});
c[s[x][y]-'a']=true;
}
} rep(i,0,3){
int tx=x+dx[i];
int ty=y+dy[i];
if(tx<1 || tx>n || ty<1 || ty>m) continue;
if(tx>=1 && tx<=n && ty>=1 && ty<=m && s[tx][ty]!='#' && !st[tx][ty] && !c[s[tx][ty]-'a']){
q.push({tx,ty,cnt+1});
}
}
}
if(!flag) cout<<-1;
} int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m; rep(i,1,n){
rep(j,1,m){
cin>>s[i][j];
if(s[i][j]=='S') stt={i,j};
if(s[i][j]>='a' && s[i][j]<='z') v[s[i][j]-'a'].pb({i,j});
}
} bfs(); return 0;
}

最新文章

  1. [bigdata] kafka基本命令 -- 迁移topic partition到指定的broker
  2. ubuntu E: Could not get lock /var/lib/dpkg/lock - open
  3. 如何用 React Native 创建一个iOS APP?
  4. B - 楼下水题(扩展欧几里德)
  5. Underscore.js 的模板功能介绍与应用
  6. Hive 报错:java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
  7. ejabberd编译更新脚本
  8. C++中重载、覆盖与隐藏的区别(转)
  9. 理解滑动平均(exponential moving average)
  10. ECMA Script 6_行为重定义 Proxy
  11. windows中,VS2017下,在Cmake中添加OpenCV依赖
  12. SpringMVC之使用ResponseEntity,java接口返回HttpStatus
  13. Jekins在Tomcat上的安装和配置
  14. golang文件相对路径问题
  15. 深度分析:Android中Mms设置页面更改短信中心号码流程
  16. 牛客多校第五场 J:Plan
  17. 我的开源项目——Jerry
  18. 如何在网上隐藏自己的IP地址(转)
  19. [JS] selector 背景选择器
  20. 怎么在Linux上抓包分析

热门文章

  1. APPIUM-Android自动化元素定位方式
  2. Java JDBC的 url 配置信息和Mybatis核心配置文件(MySQL 的配置信息)
  3. 同一个网段内所有服务器virtual_router_id设置相同的后果
  4. 原生工程接入Flutter实现混编
  5. 屏蔽每分钟SSH尝试登录超过10次的IP
  6. 查看Java的汇编指令
  7. 不用git 手动对比文件差异
  8. Kubernetes调整Node节点快速驱逐pod的时间
  9. Hmailserver搭建邮箱服务器
  10. (十七)整合 Zookeeper组件,管理架构中服务协调