具有可变数量的参数的函数 - C.

时间:2016-07-19 09:08:40

标签: c

更新:

我有以下函数,其中包含可变数量的参数,这些参数返回n图中具有最大的(有向未加权)图的地址。函数的一个参数是输入的图形数量n。可选参数是n指向这些图的指针。

注意有向图的最大度度数度数边的总数,其中循环计数两次。

以下程序没有回复:

#include <stdio.h>
#include <stdlib.h>
#include<stdarg.h>
#define MAX 10

typedef struct
{
    int n;//number of vertices in a graph
    void* info[MAX];//information in a vertex
    int am[MAX][MAX];//adjacency matrix
}GH;

int degree(GH *g)
{
    int i,j;
    int deg_row[MAX]={0},deg_column[MAX]={0};
    int count_row[MAX]={0},count_column[MAX]={0};
    int max=0,maxDeg,temp,count_total[MAX]={0};
    int transpose[MAX][MAX];

    for(i=0;i<g->n;i++)
    {
        for(j=0;j<g->n;j++)
        {
            transpose[i][j]=g->am[j][i];
        }
    }

    for(i=0;i<g->n;i++)
    {
        for(j=0;j<g->n;j++)
        {
            if(transpose[i][j]!=0)
                deg_column[i]++;
            if(i==j)
            {
                if(transpose[i][j]!=0)
                    deg_column[i]=deg_column[j];
            }
        }

        count_column[i]=deg_column[i];
    }

        for(i=0;i<g->n;i++)
    {
        for(j=0;j<g->n;j++)
        {
            if(g->am[i][j]!=0)
                deg_row[i]++;
        }

        count_row[i]=deg_row[i];
    }

    for(i=0;i<g->n;i++)
    {
        count_total[i]=count_row[i]+count_column[i];
    }

    for(i=0;i<g->n;i++)
    {
        if(count_total[i]>count_total[max])
            max=i;
    }

    maxDeg=count_total[max];
    return maxDeg;
}

GH *f(int n,...)
{
    GH *deg;
    int i,j,maxDeg[MAX]={0},max=0;

    va_list args;
    va_start(args,n);

    for(i=0;i<n;i++)
    {
       maxDeg[i]=degree(va_arg(args,GH*));
       if(maxDeg[i]>maxDeg[max])
       {
            max=i;
            break;
       }
    }
    deg=va_arg(args,GH*);

    va_end(args);
    return deg;
}

void printGraph(GH *g)
{
    int i,j;
    printf("%d",g->n);
    printf("%s",g->info);
    for(i=0;i<g->n;i++,printf("\n"))
       for(j=0;j<g->n;j++)
          printf(" %2d",g->am[i][j]);
}

int main()
{
    GH gh1 = {4,{'1','2','3','4'},{{0,1,1,0},{0,0,0,0},{0,0,0,0},{0,1,0,0}}};
    GH gh2 = {4,{'1','2','3','4'},{{1,1,1,0},{0,1,0,0},{0,0,1,0},{0,1,0,1}}};

    GH* res=f(2,gh1,gh2);
    printGraph(res);

    return 0;
}

如何打印关于度数最大的图表的数据?

1 个答案:

答案 0 :(得分:0)

我有空闲时间......

考虑这个主要内容:

df[~df.search_term.str.match('None')]

和这个打印功能:

int main()
{
    char info[] = {'1','2','3','4'};
   GH gh1 = { .n = 4, 
              .info = (void*)info, 
              .am = {{0,1,1,0},{0,0,0,0},{0,0,0,0},{0,1,0,0}}};
   GH gh2 = { .n = 4, 
              .info = (void*)info,
              .am = {{1,1,1,0},{0,1,0,0},{0,0,1,0},{0,1,0,1}}};

    printGraph(&gh1);

   return 0;
}

两者都工作并产生这个输出:

void printGraph(GH *g)
{
    int i,j;
    printf("n = %d\n",g->n);
    printf("info = ");
    for(i=0;i<g->n;i++)
    {
        printf("%c ", *((char*)*g->info)+i);
    }
    printf("\n");

    for(i=0;i<g->n;i++,printf("\n"))
       for(j=0;j<g->n;j++)
          printf(" %2d",g->am[i][j]);
}

但是,使用f函数时

n = 4
info = 1 2 3 4 
  0  1  1  0
  0  0  0  0
  0  0  0  0
  0  1  0  0

你得到分段错误。

我不知道你要计算什么,但问题不在于打印功能。

希望我帮助过。