HDU 1242 dFS 找目标最短路
//多个起点,要最短得目标,不妨倒过来从目标出发,去找最近的点更新!!!!!!递归时思路要清楚 #include<iostream>
#include<cstring>
using namespace std;
int a[202][202]; int ax,ay;int f[4][2]={0,1,1,0,-1,0,0,-1};int mmin=50000;int visit[202][202];
void dfs(int x,int y,int count)
{
if(a[x][y]==0)return;
else if(a[x][y]==2)count=count+2; //步数计数!不同情况。每次走一步深一层时计数
else count++;
if(a[x][y]==4) //出口!
{
if(count<mmin)mmin=count;
}
else
{
for(int i=0;i<4;i++) //走
{
if(visit[x][y]==0&&a[x][y]!=0) //没访问或者不被限制的
{
visit[x][y]=1;
dfs(x+f[i][0],y+f[i][1],count); //如此深入
visit[x][y]=0;
}
}
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
memset(a,0,sizeof(a));
memset(visit,0,sizeof(0));
int i,j;
mmin=50000;
char s;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>s;
if(s=='a')
{
ax=i;ay=j;a[i][j]=3;
}
else if(s=='r') a[i][j]=4;
else if(s=='.') a[i][j]=1;
else if(s=='x') a[i][j]=2;
}
dfs(ax,ay,0);
if(mmin==50000)cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
else cout<<mmin-1<<endl;
}
}
//下面是BFS:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int a[202][202]; int ax,ay;int f[4][2]={0,1,1,0,-1,0,0,-1};int mmin=50000;int visit[202][202];
struct state
{
int x,y;
int count;
state(){count=0;}
};
void bfs(state aa)
{
queue<state>q;
q.push(aa);
while(!q.empty())
{
state now=q.front(); //对队头元素分析
visit[now.x][now.y]=1; //标记访问
q.pop();
if(a[now.x][now.y]==4) //更新
{
if(now.count<mmin)mmin=now.count;
}
else
{
for(int i=0;i<4;i++) //队头拉出其他元素
{
state next;
next.x=now.x+f[i][0],next.y=now.y+f[i][1] ; //没访问或者不被限制的
if(a[next.x][next.y]==1||a[next.x][next.y]==4)next.count=now.count+1;
else if(a[next.x][next.y]==2)next.count=now.count+2;
if(visit[next.x][next.y]==0&&a[next.x][next.y]!=0)
{
q.push(next);
}
}
}
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
memset(a,0,sizeof(a));
memset(visit,0,sizeof(visit));
int i,j;
mmin=50000;
char s;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>s;
if(s=='a')
{
ax=i;ay=j;a[i][j]=3;
}
else if(s=='r') a[i][j]=4;
else if(s=='.') a[i][j]=1;
else if(s=='x') a[i][j]=2;
}
state aa;
aa.x=ax;aa.y=ay;aa.count=0;
bfs(aa);
if(mmin==50000)cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
else cout<<mmin<<endl;
}
}
HDU 1242 dFS 找目标最短路的更多相关文章
- hdu 1242 dfs/bfs
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- hdu 1242 Rescue
题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- 《31天成为IT服务达人》--做事篇(第四章)之如何找目标
前面介绍了什么是IT服务.以下几章将介绍IT服务该怎么做.在聊怎么做之前.想起几句流行的告白和准备入行IT服务事业的朋友共勉. 当你的才华 还撑不起你的野心时 就应该静下心来 学习 --- 当你 ...
- CodeForces - 103B(思维+dfs找环)
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...
- # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)
「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...
- F - JDG HDU - 2112 (最短路)&& E - IGNB HDU - 1242 (dfs)
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...
- Let‘s play computer game(最短路 + dfs找出所有确定长度的最短路)
Let's play computer game Description xxxxxxxxx在疫情期间迷上了一款游戏,这个游戏一共有nnn个地点(编号为1--n1--n1--n),他每次从一个地点移动 ...
随机推荐
- java解析sql文件
package com.athena.ckx.util; import java.io.FileInputStream; import java.io.InputStream; import java ...
- shell脚本,创建50个文件,删除50个文件。
[root@localhost ~]# cat create50.sh #!/bin/bash #创建50个文件 ` do touch student$i done echo "创建50个文 ...
- 四. python网络编程
第八章.网络基础知识 1. TCP/IP协议介绍 1.TCP/IP概念 TCP/IP: Transmission Control Protocol/Internet Protocol的简写,中译名为传 ...
- python virtualenv学习
补充:在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. virtualenv就是 ...
- 【Java_基础】空串、空格串、null的区别
1.表示的区别 string str1 = ""; //空串 str1.length() 等于 0 string str2 = " "; / ...
- 《linux设备驱动开发详解》笔记——6字符设备驱动
6.1 字符设备驱动结构 先看看字符设备驱动的架构: 6.1.1 cdev cdev结构体是字符设备的核心数据结构,用于描述一个字符设备,cdev定义如下: #include <linux/cd ...
- vfs_caches_init函数解析
vfs_caches_init函数初始化VFS,下面梳理函数调用流程 start_kernel() -->vfs_caches_init_early(); -->dcache_init_e ...
- 组队赛Day1第一场 GYM 101350 G - Snake Rana (容斥)
[题意] 给一个N×M的矩阵, K个地雷的坐标.求不含地雷的所有矩形的总数. T组数据. N M都是1e4,地雷数 K ≤ 20 Input 3 2 2 1 2 2 6 6 2 5 2 2 5 100 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph
"Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...
- [转]python 多线程threading简单分析
多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...