POJ 2775



#include #include #include #include char input[200][20];//入力保存char str[20];//各項目の入力char files[200][20];//出力するファイルを保存(最近のディレクトリの下にあるもののみを保存し、ソート用)int blank;//スペースの回数int dirs[200];//ネストされた数回目のファイルを表すために使用され、各レコードはinputの現在のディレクトリのソートint dnumです.//現在、どのディレクトリでdirsと組み合わせて/**出力スペース*/void printBlank(){for(int i=0;i=0){if(input[i][0]='f'){strcpy(files[j+],input[i]);}i--; } qsort(files,j,20,compare); for(i=0;idirs[dnum-1]){if(input[i][0]='f'){strcpy(files[j+],input[i]);input[i][0]='s;}i--; } qsort(files,j,20,compare); for(i=0;i1) dnum--; blank--; process(pos+1); break; } } return; } int main(){int i=0;int flag=0;int n=1;while(scanf("%s",str)!=EOF){//文字列if(str[0]='#')break;//if(str[0]!='*'){//strcpy(input[i++],str)を入力します.Else{strcpy(input[i],「*」;//終了セットに遭遇し、printf("DATA SET%d:/n",n+);printf("ROOT/n");blank=0;process(0);i=0;puts("")}}system("pause"); return 0; }
上記のテーマ:
 
Time Limit:
1000ms
Memory limit:
65536kB
タイトルの説明
コンピュータ上でファイルシステムの構造を見るのは通常役に立ちます.Microsoft Windows上の「explorer」プログラムがその例です.しかし、グラフィックインタフェースがある前に、グラフィック化された表示方法がなかった場合、ディレクトリとファイルの構造を「図」のように表示し、縮小した形式でディレクトリの構造を表すのが一番です.例:
ROOT

| dir1

| | file1

| | file2

| | file3

| dir2

| dir3

| | file1

file1

file2


この図は、ROOTディレクトリが2つのファイルと3つのサブディレクトリを含むことを示しています.1番目のサブディレクトリには3つのファイルが含まれ、2番目のサブディレクトリは空で、3番目のサブディレクトリには1つのファイルが含まれます.
入力
あなたの任務はプログラムを書いてテストデータを読み取ることです.各テストデータのセットは、コンピュータのファイル構造を表します.各テストデータのセットは'*'で終わり、すべての合理的な入力データは'#'で終わります.テストデータのセットには、いくつかのファイルとディレクトリの名前が含まれています(入力では指定されていませんが、ROOTディレクトリが最外層のディレクトリであると仮定しています).入力では、1つのディレクトリの内容の終了を']'で表します.ディレクトリ名の最初のアルファベットは'd'で、ファイル名の最初のアルファベットは'f'です.ファイル名には拡張子があるか、ないか(fmyfile.datやfmyfileなど)があります.ファイルとディレクトリの名前にはスペースは含まれません.
しゅつりょく
1つのディレクトリの内容を表示するときは、その中のサブディレクトリ(ある場合)を表示してから、ファイル(ある場合)を表示します.ファイルには、名前のアルファベット順に表示する必要があります(ディレクトリは名前のアルファベット順に表示されず、ディレクトリに表示される前後に表示される必要があります).各テストデータのセットについて、まず「DATA SET x:」を出力します.ここでxはテストデータの番号です(1から).2つのテストデータのセットの間に空の行を出力して分離します.
1つの'|'と5つのスペースを使用して、縮小した階層を表すことに注意してください.
サンプル入力
file1
file2
dir3
dir2
file1
file2
]
]
file4
dir1
]
file3
*
file2
file1
*
#

サンプル出力
DATA SET 1:
ROOT
| dir3
| | dir2
| | file1
| | file2
| dir1
file1
file2
file3
file4

DATA SET 2:
ROOT
file1
file2

ヒント
1つのディレクトリとそのサブディレクトリは異なる階層にあります
1つのディレクトリとその中のファイルは同じ階層にあります.
昼间に书いて、最初は复雑すぎて、后で直接考えればいいことに気づいて、再帰のプログラムではありませんが、再帰の思想を使って、意外にも一度にACになって、难题ではありませんが、お祝いしましょう~~