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

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;
}


你可能感兴趣的:(Adjacent Node Sum (图的邻接表表示 C语言))