pair queue____多源图广搜
、简介
class pair ,中文译为对组,可以将两个值视为一个单元。对于map和multimap,就是用pairs来管理value/key的成对元素。任何函数需要回传两个值,也需要pair。
该函数的相关内容如下所示:
|->Type----->struct
|->Include---> <utility>
|->Define----> pair<calss first,calss second>(first,second)
|
|->member
| |------>first
| |------>second
|
|->Sub
| |------>constructor(default,assignment,copy)
|
|->Fun
|------>operator(==,<,<=,>,>=,!=,=)
|------>make_pair(first,second) 返回一个新的pair
需求:
Header: <utility>
Namespace: std
、 stl源码
pair的源码
// TEMPLATE STRUCT pair
template<class _Ty1,
class _Ty2> struct pair
{// store a pair of values
typedef pair<_Ty1, _Ty2> _Myt;
typedef _Ty1 first_type;
typedef _Ty2 second_type;
pair()
: first(_Ty1()), second(_Ty2())
{// construct from defaults
}
pair(const _Ty1& _Val1, const _Ty2& _Val2)
: first(_Val1), second(_Val2)
{// construct from specified values
}
template<class _Other1,
class _Other2>
pair(const pair<_Other1, _Other2>& _Right)
: first(_Right.first), second(_Right.second)
{// construct from compatible pair
}
void swap(_Myt& _Right)
{// exchange contents with _Right
if (this != &_Right)
{// different, worth swapping
std::swap(first, _Right.first);
std::swap(second, _Right.second);
}
}
_Ty1 first;// the first stored value
_Ty2 second;// the second stored value
};
makepair 的源码
template<class _Ty1,
class _Ty2> inline
pair<_Ty1, _Ty2> make_pair(_Ty1 _Val1, _Ty2 _Val2)
{// return pair composed from arguments
return (pair<_Ty1, _Ty2>(_Val1, _Val2));
}
、使用范例
#include <utility>
#include <stdio.h>
using namespace std;
int main()
{
pair<char, int> c1(L'x', );
printf("[%c, %d", c1.first, c1.second);
c1 = make_pair(L'y', );
printf("[{%c}, {%d}]", c1.first, c1.second);
return ();
}
来源:http://hi.baidu.com/taozpwater/item/d85d81bde4fd154b2bebe34e
//UVa11624
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <utility> //使用pair
using namespace std; int r,c;
int map[][];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
queue< pair<int,int> > J; //声明方式
queue< pair<int,int> > F; void bfs()
{
pair<int,int> JJ,FF;
int x, y, i, time = , ok = ; while( !J.empty() )//火-1 墙1 能走0
{
time++; JJ = J.front();
J.pop(); //别忘记pop
map[JJ.first][JJ.second] = ;//标记访问(把这个地方变成墙就行)
for( i = ; i < ; i++)//向四个方向扩展(能走的)
{
x = JJ.first + dir[i][0];
y = JJ.second + dir[i][1]; //pair 具有 first 与 second 成员
if( map[x][y] == - || map[x][y] == )//墙||火不能走
continue;
if( x == r || x == || y == || y == c )//边界则走完
{
ok = ;
printf("%d\n", time);
return;
}
if( map[x][y] == )//能走的
{
J.push(make_pair(x, y));//queue中插入pair 利用make_pair()方法
}
} FF = F.front();
F.pop();
for( i = ; i < ; i++)//向四个方向扩展(会着火的) //两种扩展有顺序,先走后火
{
x = FF.first + dir[i][];
y = FF.second + dir[i][];
if( map[x][y] == - || map[x][y] == )
continue;
if( map[x][y] == || map[x][y] == )
{
map[x][y] = -;
F.push(make_pair(x, y));
}
}
}
if(ok == ) printf("IMPOSSIBLE\n");
} void bfs_fire()
{
pair<int, int> FF;
int time, i, x, y; while( !F.empty() )
{
FF = F.front();
F.pop();
time = map[FF.first][FF.second]; for( i = 0; i < 4; i++)
{
x = FF.first + dir[i][0];
y = FF.second + dir[i][1];
if(x >= r || x < 0 || y >= c || y < 0)//越界
continue;
if( map[x][y] == 0 )
{
map[x][y] = time + 1;
F.push(make_pair(x, y));
}
}
}
} int main()
{
int N;
int i,j;
char temp; //freopen("1.txt", "r", stdin);
scanf("%d", &N);
getchar();
while(N--)
{
while( !J.empty() ) J.pop(); //注意初始化(清空)队列
while( !F.empty() ) F.pop(); scanf("%d%d", &r, &c);
getchar(); for(i = ; i < r; i++)
{
for(j = ; j < c; j++)
{//# = -1 F = 1 J = 2 . = 0
scanf("%c", &temp);//当读取%c时,注意用getchar吸收掉不必要的回车
if(temp == '#')
map[i][j] = -;
else if(temp == 'F')
{
map[i][j] = ;
F.push(make_pair(i,j));
}
else if(temp == 'J')
{
map[i][j] = ;
J.push(make_pair(i,j));
}
else
map[i][j] = ;
}
getchar();
}
bfs();
}
return ;
}
pair queue____多源图广搜的更多相关文章
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)
#include <iostream> #include <stdio.h> #include <cstdlib> #include <cstring> ...
- 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)
#include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- PIGS POJ - 1149网络流(最短增广路---广搜) + 建图
题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...
- ZOJ2018/4月月赛G题Traffic Light(广搜)
题意:首先T组数据,每组数据包括:第一行:一个n,m,然后下面有一个n行m列的01矩阵. 最后一行输入四个数字,分别是起点的横纵坐标,终点的横纵坐标.询问从起点到终点,最少要几步,如果到不了输出-1 ...
- E. New Reform_贪心,深搜,广搜。
E. New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- DFS-BFS(深搜广搜)原理及C++代码实现
深搜和广搜是图很多算法的基础,很多图的算法都是从这两个算法中启发而来. 深搜简单地说就是直接一搜到底,然后再回溯,再一搜到底,一直如此循环到没有新的结点. 广搜简单地说就是一层一层的搜,像水的波纹一样 ...
- HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
随机推荐
- 关于Django路由层简单笔记
Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- POJ1149PIGS
传送门 貌似是最大流建图优化入门题(可惜我还是不会) 最暴力的建图当然是源点连每个猪圈然后猪圈需要拆成n个点分给每个人这个必定是跑不过的 所以我们可以进行优化 很明显没有被动过的猪圈一直是不变的可以不 ...
- Python中yaml和json文件的读取和应用
Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml #引入包 f=open(path) #建立Python的文件 ...
- Elasticsearch:使用function_score及soft_score定制搜索结果的分数
我们将介绍使用function_score的基础知识,并介绍一些function core技术非常有用和有效的用例. 介绍 评分的概念是任何搜索引擎(包括Elasticsearch)的核心.评分可以粗 ...
- html 中 获取百度代码
1.登录百度地图api,地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2.设置你的地理位置,以北京大学为例子如图:
- 【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置
题目链接 [题解] 二分某个数的上下界. 其实这个方法并不难. 只要你想清楚了二分最后一次执行的位置在什么地方就不难了. [代码] class Solution { public: vector< ...
- kubernetes使用kubeadm升级集群
升级前准本 官网: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/查看可升级的组件 [root@h ...
- Migrating Your Android App from Eclipse to Android Studio
By: Jason Snell | Posted in: Mobile, Performance Tech Tips, Top Post, Jun. 7th, 2013 12 inShare One ...
- cookie的使用说明
cookie的英文意思是饼干的意思,实质上是键值对组成的字典.就是说你访问某一个网址,服务器给你一个东西,你收到东西,并且贴上了一个标签.下次你访问服务器的时候,请求带有标签.这样服务器给你之后,就会 ...
- JS-监听整个页面上的DOM树变化
# [在线预览](https://jsfiddle.net/1010543618/fyf913t0/) ## 方法 - 使用<Web API 接口>的<MutationObserve ...