題目描述:
有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的值才能使士兵們以最...