算法与数据结构(c语言描述)期末复习代码总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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େখᏠ䎔ɼ୞༩௒ू༗䎔ɼཁ‫ٻ‬ ࢀ༩ࢉత䫆࿽Ґ޲ྔ౓૬ಉ
ඳW఺viతDදɼT୅လऔႊဋଖDදR ౓࿨vjࡏDදతҐஔ
पᕟதፙ༩W఺v૬MతୈҰ࿽఺ɿ ‫؃‬vi޳ੋ൱༗.఺
ፙgத༩vi૬Mత,૬૬MW఺vjతԼҰ࿽ ૬MW఺Vertex nextAdjacent(Graph g, Vertex vi, Vertex vj) ɿ ‫؃‬vi޳ੋ൱༗䫆࿽.఺
‫ظ‬຤ࢉ๏䐾 Ұɺ.! 1. ‫ج‬ຊ֓೦ɿ
a. ༗޲఺<vi,vj>ʀ Ꮰ޲఺(vi, vj) b. ༗n(n-1)৚Dత༗޲শ༗޲‫׬‬શ; ༗n(n-1)/2৚DతᏠ޲শᏠ޲‫׬‬શ c. ए<vi,vj>ੋҰ৚༗޲D, শW఺vi
઀౸vj ҃W఺vjM઀ဋvi,D<vi,vj>༩W఺vi,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)
पᕟதፙ༩W఺v૬MతୈҰ࿽఺ɿ ‫؃‬ୈiߦୈೋ࿽䇖࢝ੋ൱༗ඇྵ਺ ፙgத༩vi૬Mత,૬૬MW఺vjతԼҰ ࿽૬MW఺Vertex 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)Ճೖ౸࠷খੜ੒#தɼ௚౸์ೖॴ༗఺)
ॳn࿽J௨෼ྔ(n࿽W఺ ) -> কDू߹தD҈㖷 L⃧ഉংɼK෼䫲ࡏ䫆J௨෼ྔத‫׌‬㖷࠷খతDՃ ೖ ->॥&(䇖࢝์ೖॴ༗఺ɼ㑌࣍॥&KҰ৚DՃ ೖ)
G=(V,E)த,एV(G)த೚ҙ䫆࿽ෆಉ తW఺vi࿨vj౎ଘࡏဓ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ྻ)ඇྵ‫ݩ‬ૉ࿽਺
ୈi࿽W఺త౓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༗n࿽W ఺ɼe৚D)ɻएe<<n2,
M઀දলۭTɼ൱ M઀ۣU
൑அ䫆W఺T ੋ൱༗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[]; //ଘ์㑌W఺T࠷୹࿏‫ܘ‬ R౓
int *nextvex[]; //ଘ์vi౸vj࠷୹࿏‫্ܘ‬viత ޳0.఺Լ" }ShortPath;
೗ՌՃೖW఺vmin࡞தTW఺޳,࢖v0౸viత‫ڑ‬㩂ൺ‫ݪ‬ དྷ త‫ڑ‬㩂ߋখ, मվviత‫ڑ‬㩂: ଈ೗Ռ dist[i].length>dist[min].length+G.arcs[min][i], কW఺vi త ‫ڑ‬㩂վdist[min].length+G.arcs[min][i],ኂमվ࿏‫ܘ‬viత લ\W఺dist[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{kci­n;t fNoo;8dTe * PNode;
T୅လ O(n2)
5. ࠷୹࿏‫ܘ‬S[(࿏‫ܘ‬R౓࿏‫্֤ܘ‬Dత㖷త࿨ʣ
Dijkstra(ࢉ๏၊ॴ༗త㖷౎େဋ౳ဋྵ)
Floyd
धཁత.!
1. W఺ू߹U, ଘ์ቮ‫ٻ‬ग़ဓvo౸ሏ࠷୹࿏‫ܘ‬తॴ༗W఺ɼ ‫ڑ‬㩂ဓW఺vo౸ଖ࠷୹࿏‫ܘ‬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ࢉ㑌 ҰW఺Tత࠷୹࿏‫ܘ‬త 2୹Խ,௚౸೺ ॴ༗.఺౎ߟ5I‫ࢭڈ‬
M઀ۣUදࣔɿ䎔‫ۣܥ‬U֯*ॳ࢝0ɼए.఺์ೖ Uɼ վ1
typedef struct{ AdjType length;//࠷୹࿏‫ܘ‬R౓ int prevex;//ဓv0౸viత࠷୹࿏‫্ܘ‬viతલ\W఺
vi࿨vjੋ૬
఺, (vi,vj)ੋ༩W఺vi࿨vj౎䎔3తD d. ౓ɿ༩W఺v૬䎔3తDత਺໨(༗޲ଈೖ౓༩ग़౓೭࿨)ʀvతೖ౓ɿҎW఺v,఺తD(ID(v)); ग़౓ʀ e. )࿏‫ܘ‬ʵআ‫఺ى‬,఺૬ಉଖ༨W఺‫ۉ‬ෆಉత࿏‫ܘ‬ f. ༗޲த,एଘࡏҰW఺v,ဓ<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 ᎎೖ
相关文档
最新文档