算法与数据结构(c语言描述)期末复习代码总结
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Prim
MۣUදࣔ, DతఆԼɿ typedef struct{
int start_vex, stop_vex; AdjType weight; }Edge;
Kruskal
T=(V,Φ) while(TதॴؚD<n-1) {
ဓEதKऔલ࠷D(u,v); ဓEத "ऀ҃(ڈ8)D(u,v); if((u,v)ՃೖTෆੜճ࿏) কD(u,v)ՃೖTத; }
array
};
size
typedef struct Node * LinkSet;
……
࠷҈ݩૉతෆ䫩Yংഉྻɼଈa<b<c...
Լ"༝ӈ౸ࠨL⃧ഉྻ T࠷গŽࣈd4Ĺģ(2n+ă7)/,8 ¬IJģ TI}»à2ăŰ¢âu
େখ༩ू߹VେখᏠ䎔ɼ༩ू༗䎔ɼཁٻ ࢀ༩ࢉత䫆Ґྔ૬ಉ
ඳWviతDදɼTလऔႊဋଖDදR vjࡏDදతҐஔ
पᕟதፙ༩Wv૬MతୈҰɿ viੋ൱༗.
ፙgத༩vi૬Mత,૬૬MWvjతԼҰ ૬MWVertex nextAdjacent(Graph g, Vertex vi, Vertex vj) ɿ viੋ൱༗䫆.
ظࢉ๏䐾 Ұɺ.! 1. جຊ֓೦ɿ
a. ༗<vi,vj>ʀ Ꮰ(vi, vj) b. ༗n(n-1)Dత༗শ༗શ; ༗n(n-1)/2DతᏠশᏠશ c. ए<vi,vj>ੋҰ༗D, শWvi
౸vj ҃WvjMဋvi,D<vi,vj>༩Wvi,vj૬䎔3ɻए(vi,vj)ੋҰᏠD,
֯*0ɼD㖷ɼඇDᏠ(େత
දࣔᏠɿ㑌Dଘ䫆࣍ɼ㑌WࡏDද த.ଖ ༗ɿ㑌.Ҏ<.࢝ىతҰD (ग़Dද)ʀՄ:7ೖDදɼ㑌. Ҏଖ.ଋతD
O(n2)ɼ༩W༗䎔
ᏠɿO(n+2e) ༗ɿO(n+e)
O(1)
पᕟதፙ༩Wv૬MతୈҰɿ ୈiߦୈೋ䇖࢝ੋ൱༗ඇྵ ፙgத༩vi૬Mత,૬૬MWvjతԼҰ ૬MWVertex nextAdjacent(Graph g, Vertex vi, Vertex vj) ୈiߦୈࡾ䇖࢝ੋ൱༗ඇྵ
ۭ䐾 ٻҰ౸䫲࠷࿏ܘT䐾 O(n2)ɼٻ㑌ҰW TလO(n3)ɼۭTလO(n2) =༻n࣍ɼଈߦTO(n3)
ೋɺू߹༩ࣈయ 1. ࣈҐGࢉ
&:҈Ґ༩ɿ༗GࢉతೋI੍Ґੋ1,ሏత҈Ґ༩࠽ੋ1; ൱ 0 |:҈Ґ҃ɿཁࢀ༩GࢉతೋI੍Ґ༗Ұੋ1,ሏత҈Ґ҃बੋ1;༗GࢉతೋI੍Ґੋ0,ሏత҈Ґ҃࠽ ੋ0 ^: ҈Ґ䇗҃ɿՌGࢉత䫆ೋI੍Ґෆಉ,ሏత҈Ґ䇗҃बੋ1;ՌGࢉత䫆ೋI੍Ґ૬ಉ,ሏత҈Ґ 䇗҃बੋ0 ~:҈ҐऔɿGࢉූɻएೋI੍Ґੋ0, ଖ҈Ґऔత.Ռ ੋ1;एೋI੍Ґੋ1, ଖ҈Ґऔత.Ռੋ0 <<:ࠨҠɿকҰత֤ೋI੍Ґશ෦ࠨҠएׯҐɻᷓग़ߴҐᢝኜ,Ґ༝06ॆ >>:ӈҠɿকҰత֤ೋI੍Ґશ෦ӈҠएׯҐɻҐᷓ ग़ᢝኜ,ߴҐ༝06ॆ
int n; VexType * vexs; AdjType * arcs[]; }GraphMatrix;
WදʴOࣜଘతDද
struct EdgeNode; typedef struct EdgeNode *PEdgeNode; typedef struct EdgeNode * EdgeList; struct EdgeNode{
Prim
Kruskal
ஔॳ-> K࠷খ㖷తD -> =Dू߹தతD -> ॏ䐾(㑌࣍K ҰW(ҰD)Ճೖ౸࠷খੜ#தɼ౸์ೖॴ༗)
ॳnJ௨ྔ(nW ) -> কDू߹தD҈㖷 L⃧ഉংɼK䫲ࡏ䫆J௨ྔத㖷࠷খతDՃ ೖ ->॥&(䇖࢝์ೖॴ༗ɼ㑌࣍॥&KҰDՃ ೖ)
G=(V,E)த,एV(G)தҙ䫆ෆಉ తWvivjଘࡏဓvi౸vjҎٴဓvj౸viత࿏ ܘ, শGੋ㖘 ௨ʀ༗త ࠷େJ௨ࢠশత㖘J௨ྔʀ㖘 ௨༗Ұ㖘 ௨ྔ,बੋଖࣗʀ ඇ㖘J௨త༗༗ଟ㖘J௨ ྔ
2. पᕟ
ਂ(DFS)
void dft (Graph g){ Vertex v; for (v = firstvertex(g); v!=NULL; v=nextVertex(g,v)) if (v.mark == FALSE) dfs(g,v);
}GraphList; //Wද
1. Ꮰ䎔ۣܥUҰఆশۣU 2. Ꮰ䎔ۣܥUୈiߦ(҃iྻ)ඇྵݩૉ
ୈiWతD(vi) 3. ༗䎔ۣܥUୈiߦඇྵݩૉୈi
Wతग़OD(vi),ୈiྻೖID(vi) 4. ෆ㖷༗ᏠD༻1ɼ0දࣔɼ㖷
}//ਂपᕟ$]֤Wੋ൱ቮ;S౸
ኅ(BFS)
void bft (Graph g){ Vertex v; for (v = firstvertex(g); v!=NULL; v=nextVertex(g,v)) if (v.mark == FALSE) bfs(g,v);
}
void bfs(Graph g, Vertex v){ Vertex v1, v2; Queue q = createEmptyQueue(); enQueue(q, v); while (!isEmptyQueue(q)){ v1=frontQueue(q); deQueue(q); if(v1.mark==TRUE) continue; v1.mark=TRUE; v2=firstAdjacent(g, v1); while(v2!=NULL){ if(v2.mark==FALSE)enQueue(q, v2); v2=nextAdjacent(g, v1, v2); } }
}
3. ଘ.!
ఆ
discussion
ۭBaidu Nhomakorabea䇖 ʢG༗nW ɼeD)ɻएe<<n2,
MදলۭTɼ൱ MۣU
அ䫆WT ੋ൱༗D T 䇖P
4. ࠷খੜ#
ۣ
ද
Wදʴ䎔ۣܥU
typedef char VexType; typedef float AdjType; typedef struct{
1. ۣUa: ଘ์㑌Wڑ㩂ɼେখॳ ಉ䎔ۣܥU
2. ۣUnextvexɿଘ์vi౸vj࠷࿏্ܘviత 0WԼ"
ࢉ๏
1. ॳ࢝Uத༗voɼ౸ࣗڑ㩂0 2. ࡏV-UதKڑ㩂v0࠷খతWՃೖU 3. मਖ਼V-Uத֤Wڑ㩂 4. ॏ䐾౸ဓv0ग़ՄE౸తॴ༗Wࡏू߹Uத
} Path; Path *dist;
ਾ.!ShortPath෧্ड़䫆ۣU typedef struct{
AdjType *a[]; //ଘ์㑌WT࠷࿏ܘ R
int *nextvex[]; //ଘ์vi౸vj࠷࿏্ܘviత 0.Լ" }ShortPath;
ՌՃೖWvmin࡞தTW,v0౸viతڑ㩂ൺݪ དྷ తڑ㩂ߋখ, मվviతڑ㩂: ଈՌ dist[i].length>dist[min].length+G.arcs[min][i], কWvi త ڑ㩂վdist[min].length+G.arcs[min][i],ኂमվ࿏ܘviత લ\Wdist[i[.prevex=min
Ґྔදࣔ
ᎎೖ
int insert(BitSet *s, int index){ if(index >=0 && index>>3 < s->size){ s->array[index>>3]|=(1<<(index&07)); return 1; } return 0;
߹ूݐ
Bitset *createEmptySet(int n){//nूݩૉ
int i; BitSet *s=(Bitset*)malloc(sizeof(BitSet); if (s != NULL){
s->size = (n+7)/8;//ࣈූ+R
s -> array= (char*)malloc(s->size *sizeof(char)); if (s->array != NULL){
2. ू߹TදࣔŽőĪģƈ
Ռू߹Aੋू߹Bతࢠू,Fདྷশू߹Bੋू߹ Aతू
typedef struct{ Ґྔදࣔ
දදࣔ
ଘ.!inttyseipzdee;f s/t/ru¬ct{IJìĽģƁÂ
struct Node;
}BitcShea}tBr;iictnsh*teasatr;iz*rear;/ra/rࣈayyූ;;/Ґ//+Tྔతۭ RTŽ,㑌ҰıƂ+ݩ+ૉčอଘ/8ҐìĽtsytprd DPueNacdttoaĹeNdTfeoys\dptlrieenu{kcin;t fNoo;8dTe * PNode;
Tလ O(n2)
5. ࠷࿏ܘS[(࿏ܘR࿏্֤ܘDత㖷తʣ
Dijkstra(ࢉ๏၊ॴ༗త㖷େဋဋྵ)
Floyd
धཁత.!
1. Wू߹U, ଘ์ቮٻग़ဓvo౸ሏ࠷࿏ܘతॴ༗Wɼ ڑ㩂ဓWvo౸ଖ࠷࿏ܘRʀ 2. Wू߹V-U:ঘະ䉯ఆ࠷࿏ܘతWɼڑ㩂W vo౸<Wతแ߹ूׅuதWதTWత࠷࿏ܘR
}
void dfs (Graph g, Vertex v){ Vertex v1; v.mark=TRUE; for (v1=firstAdjacent (g, v); v1 != NULL; v1=nextAdjacent(g, v, v1)){ if (v1.mark == FALSE) dfs(g, v1); }
-Fଟ࣍భ,㑌࣍⃧ՃҰ৽త.,ࡏҸ 9H. ࡞தT.త݅Լ,7ࢉ㑌 ҰWTత࠷࿏ܘత 2Խ,౸ ॴ༗.ߟ5Iࢭڈ
MۣUදࣔɿ䎔ۣܥU֯*ॳ࢝0ɼए.์ೖ Uɼ վ1
typedef struct{ AdjType length;//࠷࿏ܘR int prevex;//ဓv0౸viత࠷࿏্ܘviతલ\W
vivjੋ૬
, (vi,vj)ੋ༩Wvivj䎔3తD d. ɿ༩Wv૬䎔3తDత(༗ଈೖ༩ग़೭)ʀvతೖɿҎWv,తD(ID(v)); ग़ʀ e. )࿏ܘʵআى,૬ಉଖ༨Wۉෆಉత࿏ܘ f. ༗த,एଘࡏҰWv,ဓ<W༗࿏ ܘՄҎ౸தଖଞॴ༗W, শࠑ༗༗ࠜ,vশతࠜɻ g. ᏠGதత࠷େJ௨ࢠ(ଈҙ⃧ՃG த.҃DҎॴಘ౸Gతࢠෆ࠶3௨) শGత ௨ྔʀ༗
int endvex; AdjType weight; PEdgeNode nextedge; };//Dදதత.
typedef struct{ VexType vertex; EdgeList edgelist;
}VexNode;//Wදதత.
typedef struct{ int n; VexNode * vexs;
ྫɿxʹ01010111ʀyʹ11011010
x&y=01010010 x|y=110111111 x^y=10001101 ~x=10101000 x<<3=10111000 x>>3=00001010 ࠨҠҰҐ૬ဋင2...ൺx=23,x<<3=23*8184
ӈҠҰҐ૬ဋআ2...ൺx=23,x>>3=23/8=2
for (i=0; i<s->size; i++) s->array[i] = ‘/0’;//ஔ
ॳ000000
return s; } } return NULL; }
@Gࢉকू߹s0>s1 ෆೳকs0తද.ஔs1ɼएࠑɼҎs1 తվձs0
ཁҰs1తݩૉऔग़์ೖҰ৽.xதɼ࠶কx ᎎೖ