1、題目中要求矩陣兩行元素的平均值按遞增順序排序,由於每行元素個數相等,按平均值排列與按每行元素之和排列是乙個意思。所以應先求出各行元素之和,放入一維陣列中,然後選擇一種排序方法,對該陣列進行排序,注意在排序時若有元素移動,則與之相應的行中各元素也必須做相應變動。
void translation(float *matrix,int n)
//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。
//for i
for(i=0; i
sum=p[i]; p[i]=p[k]; p[k]=sum; //交換一維陣列中元素之和.
}//if
}//for i
free(p); //釋放p陣列.
}// translation
[演算法分析] 演算法中使用選擇法排序,比較次數較多,但資料交換(移動)較少.若用其它排序方法,雖可減少比較次數,但資料移動會增多.演算法時間複雜度為o(n2).
2、二部圖(bipartite graph) g=(v,e)是乙個能將其結點集v分為兩不相交子集v 1和v2=v-v1的無向圖,使得:v1中的任何兩個結點在圖g中均不相鄰,v2中的任何結點在圖g中也均不相鄰。
(1).請各舉乙個結點個數為5的二部圖和非二部圖的例子。
(2).請用c或pascal編寫乙個函式bipartite判斷乙個連通無向圖g是否是二部圖,並分析程式的時間複雜度。設g用二維陣列a來表示,大小為n*n(n為結點個數)。請在程式中加必要的注釋。
若有必要可直接利用堆疊或佇列操作。【
3、約瑟夫環問題(josephus問題)是指編號為1、2、…,n的n(n>0)個人按順時針方向圍坐成一圈,現從第s個人開始按順時針方向報數,數到第m個人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,…,如此重複直到所有的人全部出列為止。現要求採用迴圈鍊錶結構設計乙個演算法,模擬此過程。
#include<
typedef int datatype;
typedef struct node
listnode;
typedef listnode *linklist;
void jose(linklist head,int s,int m)
while(k1->next!=k1) /*當迴圈鍊錶中的結點個數大於1時*/
pre->next=p->next; /*輸出該結點,並刪除該結點*/
printf("%4d",p->data);
free(p);
k1=pre->next新的報數起點*/
}printf("%4d",k1->data); /*輸出最後乙個結點*/
free(k1);
}main()
r->next=head; /*生成迴圈鍊錶*/
jose(head,s,m); /*呼叫函式*/}}
4、本題應使用深度優先遍歷,從主調函式進入dfs(v)時,開始記數,若退出dfs()前,已訪問完有向圖的全部頂點(設為n個),則有向圖有根,v為根結點。將n個頂點從1到n編號,各呼叫一次dfs()過程,就可以求出全部的根結點。題中有向圖的鄰接表儲存結構、記頂點個數的變數、以及訪問標記陣列等均設計為全域性變數。
建立有向圖g的鄰接表儲存結構參見上面第2題,這裡只給出判斷有向圖是否有根的演算法。
int num=0, visited=0 //num記訪問頂點個數,訪問陣列visited初始化。
const n=使用者定義的頂點數;
adjlist g用鄰接表作儲存結構的有向圖g。
void dfs(v)
//if
p=g[v].firstarc;
while (p)
//while
visited[v]=0; num--; //恢復頂點v
}//dfs
void judgeroot()
//判斷有向圖是否有根,有根則輸出之。
}// judgeroot
演算法中列印根時,輸出頂點在鄰接表中的序號(下標),若要輸出頂點資訊,可使用g[i].vertex。
廣西壯族自治區概況
一 概況 廣西壯族自治區簡稱桂,地處祖國南疆,位於東經104 26 112 04 北緯20 54 26 24 之間,北回歸線橫貫全區中部。廣西區位優越,南臨北部灣,面向東南亞,西南與越南毗鄰,東鄰粵 港 澳,北連華中,背靠大西南。是西南地區最便捷的出海通道,也是中國西部資源型經濟與東南開放型經濟的結...
2023年廣西壯族自治區資料總結加強
1 給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分 2 題...
2023年廣西壯族自治區資料總結高階
1 設有兩個集合a和集合b,要求設計生成集合c a b的演算法,其中集合a b和c用鏈式儲存結構表示。typedef struct node lklist void intersection lklist ha,lklist hb,lklist hc 2 將頂點放在兩個集合v1和v2。對每個頂點,檢...