图(3)

欧拉路径:经过图中所有边恰好一次的路径(一笔画)

欧拉回路:起点与终点相同


 

判断路径是否存在的方法:

欧拉回路

无向图:点度均为偶数

有向图:每个点入度出度相同

欧拉路径

无向图:点度均为偶数或仅有两个点为奇数

有向图:每个点入度和出度相同或有一点入度=出度+1,出度+入度+1,其余相等。


欧拉路径的输出

void dfs(int x){
    for(int i = head[x];i;i=nxt[i]){
        if(!vis[i]) vis[i]=1,dfs(to[i]);
        
    }
    printf("%d ",x); //谨记倒序输出 由于不简单路径的存在 
}

最短路问题

 

//Floyd算法:F[i][j][k]只考虑k个点,i到j最短路.
//F[i][j][k]=min(F[i][j][k-1],f[i][k][k-1]+f[k][j][k-1]) 
//考虑问题:是否中转->是否可以中转(max),中转后是否更优 
//预设i到j最短路为正无穷 
for(int k = 1;k <= n;k++){
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            f[i][j] = min(f[i][j],f[i][k]+f[k][j]);
        }
    }
}

 

posted @ 2022-02-10 15:54  yinfelix  阅读(68)  评论(0)    收藏  举报