- 排隊找舞伴的問題可以轉化為佇列問題,分男女構建兩個佇列,通過性別判斷跳舞者放進哪個佇列,
- 在代碼實作中,我采用檔案輸入的方式將跳舞者的名字和性別賦值給dancer陣列,再通過傳陣列的方式將Dancer入隊,
- 在完成書本任務的同時,我改進解決方案,使舞者可以回圈配對尋找舞伴
!!!注意,cv代碼時,需要自己在專案下建立一個txt檔案,里面是跳舞人員資訊,這樣才能正常運行

1.#include <iostream>
2.#include <fstream>
3.#define MaxSize 100
4.#define ERROR 0
5.#define OK 1
6.using namespace std;
7.typedef int Status;
8.typedef struct
9.{
10. char name[20];
11. char sex;
12.}Dancer;
13.typedef struct
14.{
15. Dancer *base;
16. int front;
17. int rear;
18.}SqQueue;
19.Status InitQueue(SqQueue &Q)
20.{
21. Q.base=new Dancer[MaxSize];
22. if(!Q.base) exit(ERROR);
23. Q.front=Q.rear=0;
24. return OK;
25.
26.}
27.int QueueLength(SqQueue Q)
28.{
29. return (Q.rear-Q.front+MaxSize)%MaxSize;
30.
31.}
32.Status EnQueue(SqQueue &Q,Dancer e)
33.{
34. if((Q.rear+1)%MaxSize==Q.front)
35. return ERROR;
36. Q.base[Q.rear]=e;
37. Q.rear=(Q.rear+1)%MaxSize;
38. return OK;
39.}
40.Status DeQueue(SqQueue &Q,Dancer &e)
41.{
42. if(Q.front==Q.rear) return ERROR;
43. e=Q.base[Q.front];
44. Q.front=(Q.front+1)%MaxSize;
45. return OK;
46.}
47.Status QueueEmpty (SqQueue Q)
48.{
49. if(Q.front==Q.rear) return OK;
50. else return ERROR;
51.}
52.Dancer GetHead(SqQueue Q)
53.{
54. if(Q.front!=Q.rear)
55. return Q.base[Q.front];
56.}
57.
58. SqQueue Mdancers,Fdancers;
59. //Dancer p;
60.
61.void DancerPartner(Dancer dancer[],int num)
62.{
63. Dancer p;
64. InitQueue(Mdancers);
65. InitQueue(Fdancers);
66. for(int i=0;i<=num;i++)
67. {
68. p=dancer[i];
69. if(p.sex=='F') EnQueue(Fdancers,p);
70. else EnQueue(Mdancers,p);
71.
72. }
73. cout<<"The dancing partners are:\n";
74. while(!QueueEmpty(Mdancers) && !QueueEmpty(Fdancers))
75. {
76. DeQueue(Mdancers,p);
77. cout<<p.name<<" ";
78. DeQueue(Fdancers,p);
79. cout<<p.name<<endl;
80. }
81. if(!QueueEmpty(Fdancers))
82. {
83. p=GetHead(Fdancers);
84. cout<<"The first woman to get partner is:"<<p.name<<endl;
85. }else if(!QueueEmpty(Mdancers)){
86. p=GetHead(Mdancers);
87. cout<<"The first man to get a partner is:"<<p.name<<endl;
88. }
89.}
90.int main() {
91. int i=0;
92. fstream file;
93. Dancer *dancer;
94. dancer=new Dancer [10];
95. file.open("跳舞人員.txt");
96. if(!file){
97. cout<<"錯誤!未找到檔案!"<<endl;
98. exit(ERROR);
99. }
100. while (!file.eof()){
101. file>>dancer[i].name>>dancer[i].sex;
102. //cout<<dancer[i].name<<dancer[i].sex<<endl;
103. i++;
104. }
105. DancerPartner(dancer,10);
106. return 0;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387137.html
標籤:其他
上一篇:【資料結構和演算法筆記】選擇排序(簡單選擇排序,二路歸并排序)
下一篇:實時視頻服務器 SRS 開源初探
