試題
有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
樣例輸出
afbd
士兵排隊(指令先後)是拓撲排序問題。對此,先找到入度為0的點,比如此題,在二維數**中,x點入度為0需滿足map[i][x](1 <= i <= 26)全為0,然後記錄x點,刪掉x所指向的所有節點(map[x][i] = 0,1 <= i <= 26),直到map中全為0,最後輸出記錄的x。
ac**:
#include#include#include#include#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 30;
int map[maxn][maxn], vis[maxn], an[maxn];
int main()
// printf("$");
int cnt = 26;
for(int i = 1; i <= 26; i++)
int flag = 1, ans = 1;
while(cnt)
}if(t == 1)
}if(k == -1)
cnt--;
an[ans] = k;
ans++;
for(int i = 1; i <= 26; i++)
}for(int i = 1; i < ans; i++)
printf("%c", an[i] - 1 + 'a');
printf("\n");
return 0;
}
藍橋 士兵排隊問題 拓撲排序
演算法提高 士兵排隊問題 時間限制 1.0s 記憶體限制 256.0mb 試題 有 個士兵 1 26 編號依次為 佇列訓練時,指揮官要把一些士兵從高到矮一次排成一行,但現在指揮官不能直接獲得每個人的身高資訊,只能獲得 p1比p2高 這樣的比較結果 p1 p2 記為 p1 p2 如 表示 比 高。請編...
士兵排隊問題 拓撲排序
演算法提高 士兵排隊問題 時間限制 1.0s 記憶體限制 256.0mb 試題 有 個士兵 1 26 編號依次為 佇列訓練時,指揮官要把一些士兵從高到矮一次排成一行,但現在指揮官不能直接獲得每個人的身高資訊,只能獲得 p1比p2高 這樣的比較結果 p1 p2 記為 p1 p2 如 表示 比 高。請編...
士兵排隊問題 (裸的拓撲排序)
演算法提高 士兵排隊問題 時間限制 1.0s 記憶體限制 256.0mb 試題 有 個士兵 1 26 編號依次為 佇列訓練時,指揮官要把一些士兵從高到矮一次排成一行,但現在指揮官不能直接獲得每個人的身高資訊,只能獲得 p1比p2高 這樣的比較結果 p1 p2 記為 p1 p2 如 表示 比 高。請編...