更新:
我有以下函数,其中包含可变数量的参数,这些参数返回n
图中具有最大度的(有向未加权)图的地址。函数的一个参数是输入的图形数量n
。可选参数是n
指向这些图的指针。
注意:有向图的最大度是度数和度数边的总数具有最大边数的顶点的em>,其中循环计数两次。
以下程序没有回复:
#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;
}
如何打印关于度数最大的图表的数据?
答案 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
你得到分段错误。
我不知道你要计算什么,但问题不在于打印功能。
希望我帮助过。