2103 士兵排列問題 ZCMU

2021-08-21 13:28:11 字數 865 閱讀 3404

題目描述:

有n個士兵(1≤n≤26),編號依次為 a,b,c,…,佇列訓練時,指揮官要把一些士兵從高到矮一次排成一行,但現在指揮官不能直接獲得每個人的身高資訊,只能獲得「p1比p2高」這樣的比較 結果(p1、p2∈a,b,c,…,z,記為 p1>p2),如」a>b」表示a比b高。

請編一程式,根據所得到的比較結果求出一種字典序最小的排隊方案。

(注:比較結果中沒有涉及的士兵不參加排隊)

輸入:比較結果從文字檔案中讀入(檔案由鍵盤輸入),每個比較結果在文字檔案中佔一行。

輸出:若輸入資料無解,列印「no answer!」資訊,否則從高到矮一次輸出每乙個士兵的編號,中間無分割符,並把結果寫入文字檔案中,檔案由鍵盤輸入

樣例:a>b

b>d

f>d

樣例結果:

abfd

思路:拓撲排序+優先佇列

**:#include

using namespace std;

#define max 30

int mark[max],in[max],ans[max];

int main()

it2=b-'a';

if(mark[it2]==0)

if(x=='>')

else

}priority_queue,greater> queue; //題目要求按字典序輸出,想到用到優先佇列

for(i=0;i<30;i++)

n=0;

while(!queue.empty())

}if(n!=c) //如果入隊的人數不等於總人數說明無解

printf("no answer!\n");

else

return 0;

}

ZCMU 2103士兵排隊問題(拓撲排序)

題目鏈結 description 有 個士兵 1 26 編號依次為 佇列訓練時,指揮官要把一些士兵從高到矮一次排成一行,但現在指揮官不能直接獲得每個人的身高資訊,只能獲得 p1比p2高 這樣的比較 結果 p1 p2 記為 p1 p2 如 表示 比 高。請編一程式,根據所得到的比較結果求出一種字典序最...

士兵佇列問題

某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。以後從頭開始輪流進行一至二報數 一至三報數直到剩下的人數不超...

士兵站隊問題

問題描述 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上,網格點由整數座標 x,y 表示。士兵們可以沿網格邊上 下 左 右移動一步,但在同一時刻任一網點上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇列,即排列成 x,y x 1,y x n,y 如何選擇x和y的值才能使士兵們以最...