1

Similar documents
1

Microsoft Word - DataStruct-981.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

untitled

Microsoft Word - F7801B_ch04習題解答.doc

Microsoft PowerPoint - Fig03_Stack.ppt [相容模式]

untitled

新・明解C言語入門編『索引』

C 1

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

ebook39-5

1

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

(Microsoft Word - 01\277n\306{\271q\250\256.doc)

使 用 一 般 佇 列 存 放 資 料 時, 當 前 端 (Front) 尚 有 空 位 時, 再 加 入 元 素, 卻 發 現 此 佇 列 已 滿, 請 問 此 時 使 用 下 列 那 一 個 方 法 較 佳? (A) 優 先 佇 列 (B) 環 形 佇 列 (C) 雙 向 佇 列

1








正文封面.PDF

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

epub 33-8

untitled

华恒家庭网关方案

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

O

上海政法学院

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :

学习MSP430单片机推荐参考书

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

untitled

untitled

Searching and Sorting

【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课


汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

Ps22Pdf

Microsoft PowerPoint - os_4.ppt

_汪_文前新ok[3.1].doc

Open topic Bellman-Ford算法与负环

untitled

CC213

摘 要 网 络 欺 诈 催 生 黑 色 产 业 链, 商 业 运 作 模 式 日 渐 成 熟 互 联 网 + 的 飞 速 发 展 催 生 了 黄 牛 打 码 手 羊 毛 党 等 日 趋 专 业 的 黑 产 团 伙, 他 们 分 布 在 产 业 链 的 各 个 环 节, 为 黑 产 利 益 链 条 提

!"#$ % & ())*$ $ +,-./0)1)1/.21/.$ 3 4$ 5 4$ 6 789:;9< $ = :; A B CD ())* E )FG(*? H$ $ $ $ $ $ $ $ $ $ % IJ!"#% &$ KLMNO 2(* H 2G))(2 $ PQ R

Microsoft Word - ACL chapter02-5ed.docx

Chapter12 Derived Classes

<4D F736F F D20B6C0AE78B0EDAABAC0B8A740B8D65FA7EBA7BAA54EA4E5BEC7ACE3A873C24FA55AA15E2E646F63>

Microsoft Word - F5.docx

Microsoft Word - 朗诵诵材.doc

<4D F736F F D20C8CBB8A3D2BDD2A9BCAFCDC5B9C9B7DDB9ABCBBECFEACABDC8A8D2E6B1E4B6AFB1A8B8E6CAE9A3A8CEE4BABAB5B1B4FABFC6BCBCB2FAD2B5BCA

第十号 上市公司关联交易公告

06-07周年報告template.PDF

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

untitled


static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

Microsoft Word - 1HF12序.doc

Microsoft Word - 讀報看科普─人體篇_橫_.doc

鍟嗗搧瑙傚療鈥㈤挗鏉

席 远 杨 一 人 了, 正 当 她 开 枪 时 却 发 现 子 弹 没 了 该 死, 只 能 赤 手 空 拳 了 洛 水 云 与 席 远 杨 交 起 手 来, 洛 水 云 出 手 招 招 致 命 想 那 席 远 杨 也 不 是 泛 泛 之 辈, 很 快 掌 握 了 洛 水 云 出 招 路 数 看

Microsoft Word - 2B802內文.doc

東區校園中法治教育種子師資教學研習營

閱 讀 素 材 V.S 分 組 方 式 的 差 異 化 教 學 工 具 表 班 級 :( ) 閱 讀 素 材 V.S 分 組 方 式 獨 立 閱 讀 夥 伴 閱 讀 ( 同 質 性 ) 夥 伴 閱 讀 ( 異 質 性 ) 友 善 陪 伴 虛 心 受 教 國 語 日 報 新 聞 生 活 文 藝 兒 童

C语言的应用.PDF

C++ 程式設計

[改訂新版]C言語による標準アルゴリズム事典

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

确定你的人生轨迹

C/C++ 语言 - 循环

提纲 1 2 OS Examples for 3

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

4 & & & 5+)6,+6 5+)6,+6 7)8 *(9 ):*");, +!*((6,<6 #!;";<=*#!8 > #)+9 " =68 )(( 8"=*");,8 >?=*%),<8 > 6B#(*,*9 ";=C <=*#!)+8 ),"6=*+")D6

Chapter 1 What is Programing Paradigm 1

ebook39-6


Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Explain each of the following terms. (12%) (a) O(n 2 ) (b) protected in C++ language (c) sparse matrix 7. Write

!!""# $ %#" & $$ % $()! *% $!*% +,-. / 0 %%"#" 0 $%1 0 * $! $#)2 "

C

MergerPdf.dll

CC213

Microsoft Word - data_mid1611_and_sol.docx

(Microsoft PowerPoint - \270\352\256\306\265\262\272c\302\262\263\370.ppt)

Linked Lists

试卷格式


untitled

nooog

Microsoft PowerPoint - DS&Algorithm [相容模式]

Microsoft PowerPoint - 資料結構總複習

演算法導入、ソート、データ構造、ハッシュ

FY.DOC

Transcription:

基本練習題 1. 答 : 鄰接矩陣 : D E D E 0 0 1 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 1 1 0 5 5 D E D E 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 鄰接串列 : List[] List[] E List[] E List[] D E List[D] E List[E] D List[] List[] D List[] List[] E List[D] E List[E]

2. 答 : D E D E 0 1 4 3 1 0 4 0 2 5 2 0 2 3 5 2 0 5 5 D E D E 0 3 5 5 0 1 0 4 3 0 2 List[] List[] List[] List[] List[D] 1 4 E 3 1 4 D 2 E 5 2 E 2 List[E] 3 5 D 2 List[] List[] List[] List[] List[D] List[E] E 3 5 D 5 1 4 3 E 2

3. 答 : 動作說明 佇列 (queue) 已拜訪頂點 初始狀態 front rear 拜訪, Enqueue() Dequeue 得, 將所有與 相鄰 且未被拜訪的頂點一一拜訪且 Enqueue,(,),, Dequeue 得, 將所有與 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,(D,E) D E,,,D,E Dequeue 得, 將所有與 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,(F,G) D E F G,,,D,E, F,G Dequeue 得 D, 將所有與 D 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,(H) E F G H,,,D,E,F G,H Dequeue 得 E, 將所有與 E 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,( 無 ) F G H,,,D,E,F G,H Dequeue 得 F, 將所有與 F 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,(I) G H I,,,D,E,F G,H,I Dequeue 得 G, 將所有與 G 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,( 無 ) H I,,,D,E,F G,H,I

Dequeue 得 H, 將所有與 H 相鄰且未被拜訪的頂點一一拜訪且 Enqueue,( 無 ) I,,,D,E,F G,H,I Dequeue 得 I, 將所有與 I 相鄰且 未被拜訪的頂點一一拜訪且 Enqueue,( 無 ),,,D,E,F G,H,I 佇列已空, 停止 4. 答 : 動作說明 堆疊 ( stack ) 已拜訪頂點 初始狀態 top 將起點 推入堆疊 拜訪, 將所有與 相鄰且未被拜訪的頂點一一推入堆疊 Push(,) Pop 得, 拜訪, 將所有與 相鄰且未被拜訪的頂點一一 Push,(E,F,G) Pop 得 G, 拜訪 G, 將所有與 G 相鄰且未被拜訪的頂點一一 Push,(I) Pop 得 I, 拜訪 I, 將所有與 I 相鄰且未被拜訪的頂點一一 Push,(F) Pop 得 F, 拜訪 F, 將所有與 F 相鄰且未被拜訪的頂點一一 Push,( 無 ) G F E I F E F F E F E,,,G,,G,I,,G,I,F

Pop 得 F, F 已拜訪過 E,,G, I, F Pop 得 E, 拜訪 E, 將所有與 E 相鄰且未被拜訪的頂點一一 Push,() Pop 得, 拜訪, 將所有與 相鄰且未被拜訪的頂點一一 Push,(D) Pop 得 D, 拜訪 D, 將所有與 D 相鄰且未被拜訪的頂點一一 Push,(H) Pop 得 H, 拜訪 H, 將所有與 H 相鄰且未被拜訪的頂點一一 Push,( 無 ) Pop 得, 已被拜訪, 堆疊已空, 停止 D H,,G, I, F, E,,G, I, F, E,,G, I, F, E,D,,G, I, F, E,D,H,,G, I, F, E,D,H 5. 答 : 1 2 3 D 3 F 2 E 6. 答 : 2 3 1 3 D F 2 E

7. 答 : D E F G 進階練習題 1. 答 : 不一定是唯一的 當有多個邊加權相同而且任選一邊加入都不會構成環路時, 任選一邊均可, 但可能因而造成不同的最少花費展開樹 例如下圖, 邊 (,) 和 (,D) 邊長均為 2, 選擇任一個都是正確的, 但會造成兩棵不同的最少花費展開樹 3 6 1 D 2 2 圖形 G 3 3 1 D 1 D 2 2 最少花費展開樹 1 最少花費展開樹 2 2. 答 : Decided vertices V1 V2 V3 V4 V5 V6 V0 4/0 5/0 3/0 /0 /0 /0 V0,V1 4/0 4/3 /0 9/3 11/3 V0,V1,V2 4/3 8/1 9/3 11/3 V0V1V2V3 8/1 6/2 11/3 V0V1V3V2V4 8/1 10/5 V0V1V3V2V4V5 10/5 V0 到 V6 的最短距離為 :10 V0 到 V6 的最短路徑為 :V6 <- V5 <- V2 <-V3<- V0, 亦即 V0 -> V3 -> V2 ->

V5->V6 V0 至其餘各點以此類推 3. 答 : 先算出每個頂點的最早時間和最晚時間 頂 點 D E F G 最早時間 0 3 6 10 7 12 16 最晚時間 0 8 6 10 10 12 16 因此到達頂點 G 的最早時間為 16 再算出每個工作的最早時間和最晚時間 工 作 D E D D DF DG EG FG 最早時間 0 0 0 3 3 6 10 10 7 12 最晚時間 5 0 5 6 7 6 10 13 10 12 最早時間和最晚時間相等的, 即為關鍵路徑上的邊 因此關鍵路徑為 : -> -> D -> F -> G n 4. 答 :(D) M ( i, j) /2 n i= 1 j = 1 5. 答 :(D) 程式題 1. 答 : #include <stdio.h> #include <stdlib.h> #define MX_ITEM 20 #define MX_V 20 /* 最多頂點數目 */

void FS(); void Visit(); int Enqueue(); int Dequeue(); int IsEmpty(); char Find_dj(); void ReaddjMatrix(); typedef struct tagqueue int item[mx_item]; int front; int rear; QUEUE; QUEUE q; int RealV; int ol; int Visited[MX_V]; int [MX_V][MX_V]; void main(void) int V0; ReaddjMatrix(); printf(" 請輸入起點 : "); scanf("%d",&v0); FS(V0); void ReaddjMatrix(void) int i,j; FILE *fin; if ((fin=fopen("fs.dat","r")) == NULL ) printf("fs.dat Not Found!\n"); exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V)

RealV = MX_V; for ( i=0 ; i<realv; i++) for (j=0; j<realv; j++) fscanf(fin,"%d",&[i][j]); fclose(fin); void FS (int V0) int Vx,Vy; Visit(V0); Enqueue(V0); while(!isempty()) Dequeue(&Vx); Vy=Find_dj(Vx,1); while(vy!=-1) Visit(Vy); Enqueue(Vy); Vy=Find_dj(Vx,0); void Visit(int Vx) Visited[Vx]=1; printf("v%2d\n",vx); int Enqueue(int Vx) if ((q.rear+1)%mx_item==q.front) return(0); q.rear=(q.rear+1)%mx_item; q.item[q.rear]=vx; return(1); int Dequeue(int *Vx)

if(isempty()) return(0); q.front=((q.front+1)%mx_item); *Vx=q.item[q.front]; return(1); int IsEmpty() if(q.front == q.rear) return (1); return (0); char Find_dj(int Vx,char first) if (first) ol=0; ol++; while(ol < RealV) if ([Vx][ol]==0 Visited[ol]) ol++; return (ol); return (-1); FS.dat 的內容 9 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1

0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 2 答 : #include <stdio.h> #include <stdlib.h> #define MX_ITEM 20 #define MX_V 20 /* 最多頂點數目 */ typedef struct tagstk int item[mx_item]; /* 資料欄位 */ int top; STK; STK S; void DFS(); void Visit(); char Find_dj(); int PUSH(),IsFull(),POP(),IsEmpty(); void ReaddjMatrix(); int RealV; int ol; int Visited[MX_V]; int [MX_V][MX_V];

void main(void) int V0; ReaddjMatrix(); printf(" 請輸入起點 :"); scanf("%d",&v0); DFS(V0); void ReaddjMatrix(void) int i,j; FILE *fin; if ((fin=fopen("dfs.dat","r")) == NULL ) printf("dfs.dat Not Found!\n"); exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V) RealV = MX_V; for ( i=0 ; i<realv; i++) for (j=0; j<realv; j++) fscanf(fin,"%d",&[i][j]); fclose(fin); void DFS(int V0) int Vx,Vy; PUSH (V0); while(!isempty(&s)) POP (&Vx); if(!visited[vx]) Visit(Vx); Vy=Find_dj(Vx,1); while(vy!=-1) PUSH(Vy); Vy=Find_dj(Vx,0);

void Visit(int Vx) Visited[Vx]=1; printf("v%2d\n",vx); char Find_dj(int Vx,char first) if (first) ol=0; ol++; while(ol < RealV) if ([Vx][ol]==0 Visited[ol]) ol++; return (ol); return(-1); int PUSH(int X) if(isfull(&s)) return(0); S.top=S.top+1; S.item[S.top]=X; return(1); int IsFull(STK *s) if (s->top == (MX_ITEM-1)) return(1);

return(0); int POP(int *X) if(isempty(&s)) return (0); *X=S.item[S.top]; S.top--; return(1); int IsEmpty(STK *s) if(s->top == -1) return(1); return(0); DFS.dat 的內容 9 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0

3 答 : #include <stdio.h> #include <stdlib.h> #define MX_ITEM 20 #define MX_V 20 /* 最多頂點數目 */ void FS(int); void Visit(int); int Enqueue(); int Dequeue(); int IsEmpty(); char Find_dj(); void ReaddjList(); void InsertNode(int,int); typedef struct tagqueue int item[mx_item]; int front; int rear; QUEUE; QUEUE q; int RealV; int Visited[MX_V]; typedef struct tagnode int data; struct tagnode *next; NODE; NODE [MX_V]; NODE *ol; void main(void) int V0; ReaddjList();

printf(" 請輸入起點 : "); scanf("%d",&v0); FS(V0); void InsertNode(int Row,int ol) NODE *p,*newnode; for( p=&[row]; (p->next!=null)&&(p->data<ol); p=p->next); if ((NewNode=(NODE *)malloc(sizeof(node))) ==NULL) return; NewNode->data=ol; NewNode->next=p->next; p->next = NewNode; void ReaddjList(void) int i,j,indata; FILE *fin; if ((fin=fopen("fs.dat","r")) == NULL ) printf("fs.dat Not Found!\n"); exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V) RealV = MX_V; for ( i=0 ; i<realv; i++) [i].next = NULL; for (j=0; j<realv; j++) fscanf(fin,"%d",&indata); if (InData==1) InsertNode(i,j); fclose(fin); void FS (int V0)

int Vx,Vy; Visit(V0); Enqueue(V0); while(!isempty()) Dequeue(&Vx); Vy=Find_dj(Vx,1); while(vy!=-1) Visit(Vy); Enqueue(Vy); Vy=Find_dj(Vx,0); void Visit(int Vx) Visited[Vx]=1; printf("v%2d\n",vx); int Enqueue(int Vx) if ((q.rear+1)%mx_item==q.front) return(0); q.rear=(q.rear+1)%mx_item; q.item[q.rear]=vx; return(1); int Dequeue(int *Vx) if(isempty()) return(0); q.front=((q.front+1)%mx_item); *Vx=q.item[q.front]; return(1);

int IsEmpty() if(q.front == q.rear) return (1); return (0); char Find_dj(int Vx,char first) if (first) ol=[vx].next; ol=ol->next; while(ol!= NULL) if (Visited[ol->data]) ol=ol->next; return (ol->data); return (-1); 4 答 : #include <stdio.h> #include <stdlib.h> #include <conio.h> #define MX_ITEM 20 #define MX_V 20 /* 最多頂點數目 */ void FS(); void ddedge(int,int); void Visit(); int Enqueue(); int Dequeue(); int IsEmpty(); char Find_dj();

void ReaddjMatrix(); typedef struct tagqueue int item[mx_item]; int front; int rear; QUEUE; QUEUE q; int RealV; int ol; int Visited[MX_V]; int [MX_V][MX_V]; void main(void) int V0; ReaddjMatrix(); printf(" 請輸入起點 : "); scanf("%d",&v0); FS(V0); getch(); void ReaddjMatrix(void) int i,j; FILE *fin; if ((fin=fopen("fs.dat","r")) == NULL ) printf("fs.dat Not Found!\n"); exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V) RealV = MX_V; for ( i=0 ; i<realv; i++) for (j=0; j<realv; j++) fscanf(fin,"%d",&[i][j]); fclose(fin);

void FS (int V0) int Vx,Vy; Visit(V0); Enqueue(V0); while(!isempty()) Dequeue(&Vx); Vy=Find_dj(Vx,1); while(vy!=-1) Visit(Vy); ddedge(vx,vy); Enqueue(Vy); Vy=Find_dj(Vx,0); void ddedge(int Vx,int Vy) printf("dd Edge (V%2d,V%2d)\n",Vx,Vy); void Visit(int Vx) Visited[Vx]=1; printf("v%2d\n",vx); int Enqueue(int Vx) if ((q.rear+1)%mx_item==q.front) return(0); q.rear=(q.rear+1)%mx_item; q.item[q.rear]=vx; return(1);

int Dequeue(int *Vx) if(isempty()) return(0); q.front=((q.front+1)%mx_item); *Vx=q.item[q.front]; return(1); int IsEmpty() if(q.front == q.rear) return (1); return (0); char Find_dj(int Vx,char first) if (first) ol=0; ol++; while(ol < RealV) if ([Vx][ol]==0 Visited[ol]) ol++; return (ol); return (-1);

5. 答 : #include <stdio.h> #include <stdlib.h> #define MX_ITEM 20 #define MX_V 20 /* 最多頂點數目 */ typedef struct tagstk int item[mx_item]; /* 資料欄位 */ int top; STK; STK S; void DFS(); void ddedge(int,int); void Visit(); char Find_dj(); int PUSH(),IsFull(),POP(),IsEmpty(); void ReaddjMatrix(); int RealV; int ol; int Visited[MX_V]; int [MX_V][MX_V]; void main(void) int V0; ReaddjMatrix(); printf(" 請輸入起點 :"); scanf("%d",&v0); DFS(V0); void ReaddjMatrix(void) int i,j; FILE *fin; if ((fin=fopen("dfs.dat","r")) == NULL )

printf("dfs.dat Not Found!\n"); exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V) RealV = MX_V; for ( i=0 ; i<realv; i++) for (j=0; j<realv; j++) fscanf(fin,"%d",&[i][j]); fclose(fin); void DFS(int Vs) int Vx,Tempol; Visit(Vs); Vx=Find_dj(Vs,1); while(vx!=-1) Tempol=ol; ddedge(vs,vx); DFS(Vx); ol=tempol; Vx=Find_dj(Vs,0); void ddedge(int Vx,int Vy) printf("dd Edge (V%2d,V%2d)\n",Vx,Vy); void Visit(int Vx) Visited[Vx]=1; printf("v%2d\n",vx); char Find_dj(int Vx,char first)

if (first) ol=0; ol++; while(ol < RealV) if ([Vx][ol]==0 Visited[ol]) ol++; return (ol); return(-1); int PUSH(int X) if(isfull(&s)) return(0); S.top=S.top+1; S.item[S.top]=X; return(1); int IsFull(STK *s) if (s->top == (MX_ITEM-1)) return(1); return(0); int POP(int *X) if(isempty(&s)) return (0); *X=S.item[S.top]; S.top--; return(1);

int IsEmpty(STK *s) if(s->top == -1) return(1); return(0); 6. 答 : #define MX_V 20 /* 最多頂點數目 */ int RealV; typedef struct tagnode int data; struct tagnode *next; NODE; NODE [MX_V]; void InsertNode(int Row,int ol) NODE *p,*newnode; for( p=&[row]; (p->next!=null)&&(p->data<ol); p=p->next); if ((NewNode=(NODE *)malloc(sizeof(node))) ==NULL) return; NewNode->data=ol; NewNode->next=p->next; p->next = NewNode; void ReaddjList(void) int i,j,indata; FILE *fin; if ((fin=fopen("fs.dat","r")) == NULL ) printf("fs.dat Not Found!\n");

exit(1); fscanf(fin,"%d",&realv); if (RealV>MX_V) RealV = MX_V; for ( i=0 ; i<realv; i++) [i].next=null; for (j=0; j<realv; j++) fscanf(fin,"%d",&indata); if (InData==1) InsertNode(i,j); fclose(fin); 7. 答 : #include <stdio.h> #include <stdlib.h> #define MX_V 20 int Real_V; int OST[MX_V][MX_V]; int [MX_V][MX_V],P[MX_V][MX_V]; void Floyd(void); void SearchPath(); void ReadWeightedM(void); // Read Weighted djacency Matrix from file Floyd.dat void main(void) ReadWeightedM(); Floyd(); SearchPath(P);

void ReadWeightedM(void) int i,j; FILE *fin; if ((fin=fopen("floyd.dat","r")) == NULL) printf("floyd.dat Not Found!"); exit(1); fscanf(fin,"%d",&real_v); for (i=0; i<real_v; i++) for (j=0; j<real_v;j++) fscanf(fin,"%d",&ost[i][j]); fclose(fin); void Floyd(void) int i,j,k; for(i=0;i <Real_V;i++) for(j=0;j < Real_V;j++) [i][j]=ost[i][j]; P[i][j]=j; for(k=0;k < Real_V;k++) for(i=0;i < Real_V;i++) for(j=0;j < Real_V;j++) if([i][j] > [i][k]+[k][j]) [i][j]=[i][k]+[k][j]; P[i][j]=P[i][k]; void SearchPath(int P[][MX_V])

int i,j,row; for(i=0;i < Real_V;i++) for(j=0;j < Real_V;j++) printf("shortest Path from V%d to V%d cost is:%d\n",i,j,[i][j]); printf("shortest path is:\n from v%d",i); row=p[i][j]; while(row!= j) printf(" to V%d",row); row=p[row][j]; printf(" to V%d\n",row);