图(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]); } } }
浙公网安备 33010602011771号