| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 276 人关注过本帖
标题:刚接触图论,代码是参考别人的,但是运行结果不对,请求指教
只看楼主 加入收藏
whibla
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-8-1
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
刚接触图论,代码是参考别人的,但是运行结果不对,请求指教
//未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N)。如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居。现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系。


#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 15
struct vertex
{
    int degree;
    int index;
}v[N];
int cmp( const void *a,const void *b )
{
    return ((vertex *)b)->degree - ((vertex *)b)->degree;
}
int main()
{
    int r,k,p,q;
    int i,j;
    int d1;
    int T,n;
    int Edge[N][N],flag;
    scanf( "%d",&T );
    while( T-- )
    {
        scanf( "%d",&n );
        for( i = 0; i < n; i++ )
        {
            scanf( "%d",&v[i].degree );
            v[i].index = i;
        }
        memset( Edge,0,sizeof( Edge ) );
        flag = 1;
        for( k = 0; k < n&&flag; k++ )
        {
            qsort( v+k,n-k,sizeof( vertex ),cmp );
            i = v[i].index;
            d1 = v[k].degree;
            if( d1 > n - k - 1 )  flag = 0;
            for( r = 1; r <= d1&&flag; r++)
            {
                j = v[k+r].index;
                if( v[k+r].degree <= 0 )  flag = 0;
                v[k+r].degree--;
                Edge[i][j] = Edge[j][i] = 1;
            }
        }
        if( flag )
        {
            puts( "YES" );
            for( p = 0; p < n; p++ )
            {
                for( q = 0; q < n; q++ )
                {
                    if( q )
                        printf( " " );
                    printf( "%d",Edge[p][q] );
                }
                puts( "\n" );
            }
        }
        else puts( "NO" );
        if( T )  puts( "\n" );
    }
    return 0;
}
搜索更多相关主题的帖子: void include return 未名湖 
2012-11-05 21:07
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:20 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-05 22:57
whibla
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-8-1
收藏
得分:0 
2012-11-06 08:02
whibla
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-8-1
收藏
得分:0 

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 15
struct vertex
{
    int degree;
    int index;
}v[N];
int cmp( const void *a,const void *b )
{
    return ((vertex *)b)->degree - ((vertex *)b)->degree;这出问题了,return ((vertex *)b)->degree - ((vertex *)a)->degree;
}
int main()
{
    int r,k,p,q;
    int i,j;
    int d1;
    int T,n;
    int Edge[N][N],flag;
    scanf( "%d",&T );
    while( T-- )
    {
        scanf( "%d",&n );
        for( i = 0; i < n; i++ )
        {
            scanf( "%d",&v[i].degree );
            v[i].index = i;
        }
        memset( Edge,0,sizeof( Edge ) );
        flag = 1;
        for( k = 0; k < n&&flag; k++ )
        {
            qsort( v+k,n-k,sizeof( vertex ),cmp );
            i = v[i].index;
            d1 = v[k].degree;
            if( d1 > n - k - 1 )  flag = 0;
            for( r = 1; r <= d1&&flag; r++)
            {
                j = v[k+r].index;
                if( v[k+r].degree <= 0 )  flag = 0;
                v[k+r].degree--;
                Edge[i][j] = Edge[j][i] = 1;
            }
        }
        if( flag )
        {
            puts( "YES" );
            for( p = 0; p < n; p++ )
            {
                for( q = 0; q < n; q++ )
                {
                    if( q )
                        printf( " " );
                    printf( "%d",Edge[p][q] );
                }
                puts( "\n" );
            }
        }
        else puts( "NO" );
        if( T )  puts( "\n" );
    }
    return 0;
}
结果还是有问题
2012-11-06 08:12
快速回复:刚接触图论,代码是参考别人的,但是运行结果不对,请求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025608 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved