在写算法中,如果不想使用结构体,但是例如BFS这样的算法会用到存储一对的情况,
我们可以考虑用pair
注意:需要头文件 map, 比utility容易记忆
使用案例
BFS 奇怪的电梯
题目选自洛谷P1135
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
int N,A,B;
int book[201];
int nt[201];
queue<pair<int,int> > q;
bool judge(int x){
if(book[x] != 1 && x > 0 && x <= N) return true;
return false;
}
int bfs(int s){
q.push(make_pair(s,0)); book[s] = 1;
while(!q.empty()){
int f = q.front().first;
if(f == B) return q.front().second;
if(judge(f+f[nt])) {
q.push(make_pair(f+f[nt],q.front().second+1));
book[f+f[nt]] = 1;
}
if(judge(f-f[nt])){
q.push(make_pair(f-f[nt],q.front().second+1));
book[f-f[nt]] = 1;
}
q.pop();
}
return -1;
}
int main(){
scanf("%d%d%d",&N,&A,&B);
for(int i=1;i<=N;i++)
scanf("%d",&nt[i]);
int ans = bfs(A);
printf("%d",ans);
return 0;
}
可以看到,我们在使用使,只需将queue里的类型 从 结构体类型 变成 pair类型,
然后我们在使用“一对”数据时,直接make_pair() 即可。
非常之方便~~