一見単純な質問見当もつかない-_- ||
タイトル:、数1があります... N N帳、与えるために準備ができnは個人の、利益を読んで一人一人が二次元配列で記述すること
1:0この本のように:ない本のよう
[I] [J] = 1、などのI〜Jの本のように
[I] [J] = 0のように、私は本jを好きではありません
サブブックは皆を満たす解決する方法
N N個々の書籍。。。。
分析:ブックによる答えは、理解することができます。
以下のような:
6
100 000は、(最初の本のように、最初の本2,3,4,5,6好きではなかったです)
0 1 1 1 1 1
1 1 0 0 0 0
0 0 0 0 1 0
1 1 0 0 1 1
1 0 1 0 0 0
- 最初の人:私は最初の本、独自のディストリビューションの残りの部分を選んだ、それはスタッフすることができますか?(再帰層1)
- 第二の男:私はあなた自身のディストリビューションの残りの部分を二本を選んだ、それはスタッフすることができますか?(再帰層2)
- 三人:いいえ!私はちょうど第一および第二の本、本のように、再帰は、再帰的レイヤ2(レイヤ3再帰的)を返す、失敗します
- 二人目:私は、この第三、および独自のディストリビューションの残りの部分を選んだこと、それはスタッフすることができますか?(再帰層2)
- 第三者:私は2番目の本あなた自身のディストリビューションの残りの部分を選んだ、それはスタッフすることができますか?(再帰層3)
- 4人目:私は第五本を選び、あなた自身のディストリビューションの残りの部分は、それがスタッフすることができますか?(再帰層4)
- 第五人:私は第六本、独自のディストリビューションの残りの部分を選んだ、それはスタッフすることができますか?(再帰層5)
- 第六男:いいえ、私は本好きではなかった(再帰層6)
- 第五男:いいえ、これは割り当てることができません(再帰層5)
- 4番目の男:いいえ、これは割り当てることができません(再帰層4)
- 第三の男:いいえ、これは割り当てることができません(再帰的なレイヤ3)
- 第二の男:私は4冊目の本、独自のディストリビューションの残りの部分を選択し、それをスタッフすることができますか?(再帰層2)
- 第三者:私は2番目の本あなた自身のディストリビューションの残りの部分を選んだ、それはスタッフすることができますか?(再帰層3)
- 4人目:私は第五本を選び、あなた自身のディストリビューションの残りの部分は、それがスタッフすることができますか?(再帰層4)
- 第五人:私は第六本、独自のディストリビューションの残りの部分を選んだ、それはスタッフすることができますか?(再帰層5)
- 第六男:あなたが再帰的な終わりを手渡すことができますので、私は、第三の本を選んだ(再帰層6)
理解が難しかったが、私は本当にロジック感の強いないので......私を殺しているコードを書き始めていないが。
コードがやっと完成し、やっと私たちはもっとああ見に戻って見る必要があるも、理解しています。。本当に自分の将来が心配。。
:()...私のストロークのストロークを与えるために兄を見つけるために時間を割いて、レコードとして次のコードを書きました
書式#include <iostreamの>
使用して 、名前空間STD;
の#define N 550
INT [N] [N]等; // 。のような[I] [J] = 1、I-J-ブックの個人的なお気に入り(0嫌い)
int型の答え[ N-N]; // 答え[M] M = iが選択されたi番目の個々の書籍レコード
BOOL選択[N]; // 。選択された[I] = I-ブック1が選択されていない=(0を選択されています)
BOOL検索(int型M){
IF(M == N-){
リターン trueに;
}
ため(INT I = 0、I <N - 、I ++ ){
IFが!(選択された[I] &&[M] [I]){など
の答え[M] = I + 1 ; // M-I-ブック選択された個体;
選択された[I] = 1 ;
IF(検索(M + 1 ))
リターン trueに ; // 最初のM + 1個体は本のように、本はi番目返さない
選択された[I] = 0 ;
}
}
戻り falseにする;
}
int型のmain(){
COUTは << " ----- ----開始ブックから選択します" << てendl;
coutの << 「完全に人々のこの番号を入力してください」<< ENDL;
一方(scanfの(" %のD "、およびN-)!= EOF){
memsetの(選択され、0、はsizeof (選択された));
のmemset(答え、0、はsizeof (回答));
のための(INT I = 0 ; I <N-; I ++ ){
ため(INT J = 0 ; J <N-; J ++ ){
のprintf(" %d個のブックの個々の同類かの%のD、1など、0嫌い:"、I + 1、J + 1 );
scanfの("%d個 "& のような[I] [J]);
IF(検索(0 )){
のprintf(" ブック%D \ N-の個人の選択の%d個"、1。 、答え[ 0 ]);
のために(INT I = 1 ; I <N-; I ++ ){
のprintf(" ブックの%dの個々の選択のは%d "、I + 1 、回答[I]);
のprintf(" \ N- " );
}
}
}
}
裁判所未満 < <" -----ラウンド終了----- " << てendl;
}
リターン 0 ;
}