Adjacent Node Sum (图的邻接表表示 C语言)

时间:2022-01-11 05:12:25

Adjacent Node Sum



题目内容:

給定一個節點有權重的圖,
請你計算與一個節點相鄰的所有節點的權重和。
節點編號為1~N。
每個節點的編號即為他的權重。


输入格式:
只有一組測資。
第一行有三個數字,N、M、Q。
N表示這張圖有多少節點,
M表示這張圖有多少邊,
Q表示會有多少個詢問。
之後M行,每行有兩個數字a、b,
代表a與b是相鄰的。
之後Q行,每行有一個數字x,
代表詢問的點編號。
給定的編不會重複,
而且不會有自己和自己相連的情況。
測資範圍:
0 < N < 1000
0 < M < 20000
0 < Q < 2000


输出格式:
對於每一個詢問,計算與該節點相鄰的所以節點權重和。
將所有詢問的答案加總後再輸出。


输入样例:
10 8 2
1 2
1 3
2 5
2 6
3 8
10 9
8 6
3 5
1
3


输出样例:
19


时间限制:100ms内存限制:16000kb


coding using c

#include <stdio.h>
#include <stdlib.h>


struct _node{
int value;
struct _node* next;
};

typedef struct _node Node;

void insert_node(Node* array[], int idx, int value)
{
Node* p;
p = (Node*)malloc(sizeof(Node));
p->value = value;
if(array[idx]==NULL)
{
p->next = NULL;
array[idx] = p;
}
else
{
p->next = array[idx];
array[idx] = p;
}
}

int count_sum(Node* head)
{
int sum=0;
while(head)
{
sum+=head->value;
head=head->next;
}
return sum;
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
int n = 10, edges = 8, query = 2, idx, value,sum;
scanf("%d %d %d",&n,&edges,&query);
Node * array[n+1];
int i=0,j=0;
for(i=0;i<n+1;i++)
{
array[i]=NULL;
}
for(i=0;i<edges;i++)
{
scanf("%d %d", &idx, &value);
insert_node(array, idx, value);
insert_node(array, value, idx);
}
sum=0;
for(i=0;i<query;i++)
{
scanf("%d",&idx);
sum+=count_sum(array[idx]);
}
printf("%d",sum);

return 0;
}