#9307: 老闆阿我要退貨的解答(C語言版)


stars081213 (stars)

學校 : 國立臺灣師範大學
編號 : 44567
來源 : [106.105.15.192]
最後登入時間 :
2019-06-05 22:41:22
b298. 老闆阿我要退貨 -- 103學年度板橋高中校內資訊學科能力競賽(一) | From: [49.219.154.6] | 發表日期 : 2014-10-11 00:11

不好意思,我要老闆阿我要退貨的解答(C語言版)

我不參加排行,只是想知道用for,while,switch可不可以解得出來

只要C的喔~~~不要C++ 

 
#9315: Re:老闆阿我要退貨的解答(C語言版)


morris1028 (碼畜)

學校 : 國立花蓮高級中學
編號 : 3529
來源 : [114.37.59.62]
最後登入時間 :
2021-07-12 19:00:43
b298. 老闆阿我要退貨 -- 103學年度板橋高中校內資訊學科能力競賽(一) | From: [114.34.29.100] | 發表日期 : 2014-10-13 09:05

在 ANSI C 裡頭,儲存邊是相當麻煩的,通常藉由 linked list 來完成,
但是記憶體控管對於新手而言比較繁瑣,我們藉以借用數組 (陣列) 模擬相鄰連接表,
網路上稱呼為 "鏈式向前星"
#include <stdio.h> #include <string.h>  #define MAXN 32767 #define MAXM 131072 struct Node {     int x, y, next; }; struct Node edge[MAXM]; int e, head[MAXN]; void addEdge(int x, int y) {     edge[e].x = x, edge[e].y = y;     edge[e].next = head[x], head[x] = e++; }  int wa[MAXN]; int dfs(int u) { 	wa[u] = 1; 	int i; 	for (i = head[u]; i != -1; i = edge[i].next) { 		int v = edge[i].y; 		if (!wa[v])	dfs(v); 	} } int main() { 	int n, m, l, q; 	int x, y, i; 	while (scanf("%d %d %d %d", &n, &m, &l, &q) == 4) { 		e = 0; 		memset(head, -1, sizeof(head)); 		memset(wa, 0, sizeof(wa)); 		for (i = 0; i < m; i++) { 			scanf("%d %d", &x, &y); 			addEdge(x, y); 		} 		for (i = 0; i < l; i++) { 			scanf("%d", &x); 			dfs(x); 		} 		for (i = 0; i < q; i++) { 			scanf("%d", &x); 			puts(!wa[x] ? "YA~~" : "TUIHUOOOOOO"); 		} 	} 	return 0; }
 
ZeroJudge Forum