Ideal Path UVA-1599隣接表双方向BFS

1432 ワード

考え方:紫書の考え方、まず終点から逆BFSで各点から終点までの最短距離を探し出して、それからBFSに向かって1つの循環内に2つの循環をカバーして、第1の循環は最小の色を探し出して、第2の循環は条件に合う点を類似の行列の配列(vector)に入れてそれからずっと探し出すことができます
#include
using namespace std;
const int maxn=100000+10;

struct Edge{
int u,v,c;
Edge(int a=0,int b=0,int c=0):u(a),v(b),c(c){}
};
vectoredges;   //      
vector G[maxn];
void Add_edges(int u,int v,int c){
edges.push_back(Edge(u,v,c));
int index=edges.size()-1;
G[u].push_back(index);
}

int vis[maxn];
int d[maxn];
int n;



void rev_bfs(){
    memset(vis,0,sizeof(vis));  //   BFS              
d[n-1]=0;
queueq;
q.push(n-1);
vis[n-1]=1;
while(!q.empty()){
    int temp=q.front();
    q.pop();
    for(int i=0;ians;

void bfs(){  //   BFS
memset(vis,0,sizeof(vis));
vis[0]=1;
ans.clear();

vectornext;
next.push_back(0);
for(int i=0;inext2;
    for(int j=0;j