2623:マトリックスのゲーム
制限時間:1秒 メモリ制限:64メガバイト提出:15 解決策:9
[ 提出 ] [ 状態 ] [命題男:ADMIN ]
タイトル説明
マトリックスゲーム - 小Qはチェスに加えて、彼はまた、コンピュータのパズルゲームをプレイするのが好き、非常に明るい子です。黒と白のためのゲーム行列N * Nの行列で(チェスのような一般的に、しかし色は任意です)。二つの動作は毎回行列を行ってもよいです。
(右下接続左)行列の主対角線は、格子上の黒であるように、すなわち、いくつかの操作を介してゲームの目的、。
いくつかの点では、小さなQは、彼がこれらのレベルは、単に何の解決策ではないではないことを疑うようになったという不可解!!少しQは、これらのレベルは解けるかどうかを判断するためのプログラムを書くことにしました。
- 回線交換動作は:マトリックスの任意の2つの行を選択し、2つのラインの交換(即ち、カラーグリッド交換に対応)
- カラム交換:二列交換の任意の行と列のマトリックスを選択し(すなわち、格子に対応する色の交換)
(右下接続左)行列の主対角線は、格子上の黒であるように、すなわち、いくつかの操作を介してゲームの目的、。
いくつかの点では、小さなQは、彼がこれらのレベルは、単に何の解決策ではないではないことを疑うようになったという不可解!!少しQは、これらのレベルは解けるかどうかを判断するためのプログラムを書くことにしました。
エントリー
最初の行は、整数のTを含むデータ群を表します。
含むデータの次Tセット、各整数N、正方形の大きさの最初のラインデータ、次の動作N N * N行列01(0、1、黒を白表します)。
含むデータの次Tセット、各整数N、正方形の大きさの最初のラインデータ、次の動作N N * N行列01(0、1、黒を白表します)。
輸出
これは、Tラインが含まれています。データの各セットについて、点解ける場合、はい出力線と、それ以外の場合、出力ライン番号
サンプル入力
2
2
0 0
0 1
3
0 0 1
0 1 0
1 0 0
サンプル出力
ノー
はい
プロンプト
20%のためのデータ、N≤7
50%のためのデータ、N≤50の
100%データ、N≤200
#include <ビット/ STDC ++ H> // の#defineスキャン(X)のscanf( "%d個"、&x)は、 // の#define SCAN2(X、Y)のscanf( "%d個の%のD"、およびX&Y)。 // の#define RG登録int型 の#define lowbit(x)はx&( - x)を 使用して 名前空間はstdを、 typedefの長い 長いLL。 CONST LL MOD = 1E9 + 7 。 constの LL INF = 1E18; CONSTの INT M = 1E3 + 6 。 const int型 MAXN = 6E2 + 10 。 INT T、N。 INT O [M] [M]、E [MAXN]。 INT [MAXN]使用します。 列をなしてBOOL DFS(int型CUR){ ため(登録をint i = 1 ; iが<= N; ++ I){ もし(O [CUR] [I] &&![i]を使用){ [i]を使用 = 1 。 もし(E [I] == - 1つの || DFS(E [I])){ E [I] = CUR。 返す 真; } } } を返す 偽。 } インラインボイド(解決){ ため(登録INT I =を1 ; iが<= N; ++ I)E [I] = - 1 。 int型のres = 0 ; 用(登録をint i = 1 ; iが<= N; ++ I){ memsetの(使用、0、はsizeof (使用))。 もし(DFS(i))を++ のres; } であれば(RES == N)プット(" はい" ); 他のプット(「ノー」)。 } int型のmain(){ #ifndefのONLINE_JUDGE freopenは(" splay.txt "、「R"STDIN); #endifの scanf関数(" %のD "& T)、 一方(T-- ){ scanf関数(" %のD "、&N) のために(登録をint i = 1 ; iが<= N + + I){ ため(登録INT J = 1 ; jは<= N; ++ J){ scanf関数(" %のD "、&O [I] [J]); } } (解決); } 戻り 0 ; }