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代表不能走的格 子.之 ...
随机推荐
- 力扣——remove element(删除元素) python实现
题目描述: 中文: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) ...
- 【Flutter学习】之动画实现原理浅析(一)
一,动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的And ...
- OC学习篇之---谓词(NSPredicate)
在前一篇文章中我们介绍了OC中一个重要技术通知:http://blog.csdn.net/jiangwei0910410003/article/details/41923401,今天我们在来看一下OC ...
- centos系统下安装MySQL5.7.18
1.首先安装依赖包 yum install -y gcc gcc-c++ ncurses-devel perl openssl-devel 最最重要的是,不要忘了安装openssl-devel 2.安 ...
- Python-字符串str和json格式的转换
str转json str转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号.如果不一致,推荐用正则进行拆分至和json格式一致1. 通过 ...
- leetcode上的一些栈、队列问题
20-有效的括号 思路:主要考察栈的一些基本操作,像push()(将数据压入栈顶).top()(取栈顶的数据但不删除).pop()(直接删除栈顶的元素).empty()(判断栈是否为空).这题就是先把 ...
- cs224d 作业 problem set2 (一) 用tensorflow纯手写实现sofmax 函数,线性判别分析,命名实体识别
Hi Dear Today we will use tensorflow to implement the softmax regression and linear classifier algor ...
- 异步编程与scrapy
https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter1/index.html https: ...
- OAccflow集成sql
SELECT * FROM PORT_EMP WHERE NO='18336309966'SELECT * FROM PORT_DEPT WHERE no='42DBAF50712C4046B09BC ...
- 11. Django及数据库环境搭建
项目背景 我们做功能测试的时候知道,一个产品基本上都会有增删改查功能,对应接口也就是增删改查接口.做了2年接口自动化测试,觉得最难的点应该是数据的初始化,其实测试一个接口.对接口使用单元测试框架.生成 ...