摘要:
#define MAXN 10 //MAXN为表示X集合和Y集合顶点个数最大值的符号常量int nx, ny; //X和Y集合中顶点的个数int g[MAXN][MAXN]; //邻接矩阵,g[i][j]为1表示Xi和Yj有边相连int cx[MAXN] , cy[MAXN]; //cx[i]表示最终求得的最大匹配中与Xi匹配的Y顶点, cy[i]同理DFS增广//DFS算法中记录顶点访问状态的数组,mk[i] = 0表示未访问过,为1表示访问过int mk[MAXN] ;//从X集合中的顶点u出发,用深度优先的策略寻找增广路//(这种增广路只能使当前的... 阅读全文
摘要:
void tarjan(int u){ int v; dfn[u] = low[u] = ++cnt;//开始时dfn[u] == low[u] S[top++] = u;//进栈 vis[u] = true; for (int i=head[u]; i!=-1; i=Edge[i].next) { v = Edge[i].to; if (dfn[v] == 0)//如果v点还未遍历 { tarjan(v);//向下遍历 low[u] = low[u] dfn[v])//... 阅读全文
摘要:
输入事例:7 91 2 281 6 10 2 3 162 7 143 4 124 5 224 7 185 6 255 7 24输出:1 6 10 6 5 25 5 4 224 3 123 2 162 7 14weight if MST is 991 #include 2 #include 3 #define INF 1000000 //无穷大 4 #define MAXN 21 //顶点个数最大值 5 6 int n, m; //顶点个数、边数 7 int Edge[MAXN][MAXN]; //邻接矩阵 8 int lowcost... 阅读全文
摘要:
无向图连通图(割) int bridge,edge[v][v],ans[v],prve[v],vis[v];// vis[i] 0为尚未访问 1为正在访问 2已经访问//ans[i] 该点能到达的最小序号// pre[i] 该点的序号// INIT: edge[][]邻接矩阵;vis[],pre[],anc[],deg[]置为0; //k=deg[0], deg[i]+1(i=1…n-1) 为删除该节点后得到的连通图个数 // 注意:0作为根比较特殊!void dfs(int cur,int father,int dep,int n){ int cnt = 0; vis[cur] = 1; . 阅读全文
摘要:
无向图找桥 int bridge,edge[v][v],ans[v],prve[v],vis[v];// vis[i] 0为尚未访问 1为正在访问 2已经访问//ans[i] 该点能到达的最小序号// pre[i] 该点的序号void dfs(int cur,int father,int dep,int n){ if(bridge) // 已经找到桥 return ; vis[cur] = 1; pre[cur] = ans[cur] = dep; for(int i=0;ipre[cur]) { bridge = 1; return ; } } } vis[cur] ... 阅读全文