搜索
查看: 1245|回复: 0
打印 上一主题 下一主题

[啊哈!算法] [图论]割边的算法

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-20 20:41:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[code=Cpp width=740px]#include <stdio.h>
#define MAX 9
int n,m,e[MAX][MAX],root;
int dfn[MAX],low[MAX],flag[MAX],index;
int min(int a,int b)
{
    return a < b ? a : b;
}
void dfs(int cur,int father)
{
    int i,j;

    index++;
    dfn[cur]=index;
    low[cur]=index;
    for(i=1;i <= n;i++)
    {
        if(e[cur]==1)
        {
            if(dfn==0)
            {
                dfs(i,cur);
                low[cur]=min(low,low[cur]);
                if(low > dfn[cur])
                    printf("%d-%d\n",cur,i);
            }
            else if(i != father)
            {
                low[cur]=min(low[cur],dfn);
            }
        }
    }  
}
int main()
{
        freopen("edge.in","r",stdin);
    freopen("edge.out","w",stdout);
    int i,j,x,y;
    scanf("%d %d",&n,&m);
    for(i=1;i <= n;i++)
        for(j=1;j <= n;j++)
            e[j]=0;

    for(i=1;i <= m;i++)
    {
        scanf("%d %d",&x,&y);
        e[x][y]=1;
        e[y][x]=1;
    }
    root=1;
    dfs(1,root);  

    for(i=1;i <= n;i++)
    {
        if(flag==1)
            printf("%d ",i);
    }
    return 0;
}[/code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表