Ideal Path UVA - 1599 邻接表 双向BFS

思路 :紫书上的思路,先从终点反向BFS找出每一个点到终点的最短距离,然后正向BFS 一个循环内套两个循环,第一个循环找出最小的颜色,第二个循环把符合条件的点放入类似队列的数组(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

你可能感兴趣的:(ACM)