若can[i]表示i号节点能到达终点,那么剔除满足不条件一的点时,一定不能这么写:
for(int i=1;i<=n;i++){
if(can[i]){
for(int j=0;j<e[i].size();j++){
if(!can[e[i][j]]){can[i];break;}//如果当前点出边所指向的点,不与终点联通,则该点不可取
}
}
}
而是新建一个inroad数组,表示当前节点能存在于路径中:
for(int i=1;i<=n;i++){
if(can[i]){
bool flg = 1;
for(int j=0;j<e[i].size();j++){
if(!can[e[i][j]]){flg=0;break;}
}
if(flg)inroad[i] = 1;
}
}