poj 1321二次元図は同列ではない.
1802 ワード
http://poj.org/problem?id=1321
ボードの問題
Time Limit: 1000 MS
メモリLimit: 100000 K
Total Submissions: 29074
Acceepted: 14410
Description
与えられた形状のボード(形が不規則かもしれない)に駒を並べます.駒には違いがありません.任意の2つの駒を碁盤の中の同じ行または同じ列に置くことはできません.所与の形と大きさの碁盤について、k個の駒を配置するすべての実行可能な配置案Cをプログラミングして解いてください.
Input
複数のグループのテストデータを入力します.
各グループのデータの最初の行は2つの正の整数で、n kは、1つの空白で区切られて、1つのn*nの行列内で碁盤を記述し、駒を並べる数を表しています.n<=8,k<=n
-1-1の場合は入力終了を表します.
続いてn行は碁盤の形を示しています.各行にはn文字があり、そのうちの菗は碁盤の領域を表しています.空白の領域を表しています.(データは余分な空白の行や空白の列がないことを保証します.)
Output
各グループのデータに対して、ライン出力が与えられ、配置されたスキーム数Cが出力される(データ保証C<2^31).
Sample Input
ボードの問題
Time Limit: 1000 MS
メモリLimit: 100000 K
Total Submissions: 29074
Acceepted: 14410
Description
与えられた形状のボード(形が不規則かもしれない)に駒を並べます.駒には違いがありません.任意の2つの駒を碁盤の中の同じ行または同じ列に置くことはできません.所与の形と大きさの碁盤について、k個の駒を配置するすべての実行可能な配置案Cをプログラミングして解いてください.
Input
複数のグループのテストデータを入力します.
各グループのデータの最初の行は2つの正の整数で、n kは、1つの空白で区切られて、1つのn*nの行列内で碁盤を記述し、駒を並べる数を表しています.n<=8,k<=n
-1-1の場合は入力終了を表します.
続いてn行は碁盤の形を示しています.各行にはn文字があり、そのうちの菗は碁盤の領域を表しています.空白の領域を表しています.(データは余分な空白の行や空白の列がないことを保証します.)
Output
各グループのデータに対して、ライン出力が与えられ、配置されたスキーム数Cが出力される(データ保証C<2^31).
Sample Input
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1
Sample Output2
1
#include <iostream>
#include <string.h>
using namespace std;
char str;
bool f[9][9],g[9];/// g[]
int ans,k,n;
void sovle(int l,int num)
{
if(num==k)
{
ans++;
return;
}
if(l>=n)
return;
for(int i=0; i<n; i++)
{
if(f[l][i]&&!g[i])
{
g[i]=true; /// ,g[i] true
sovle(l+1,num+1); /// , ,
g[i]=false; /// ,g[i] false,
}
}
sovle(l+1,num);
return ;
}
int main()
{
while(cin>>n>>k)
{
if(n==-1&&k==-1)
break;
memset(f,false,sizeof(f));
memset(g,false,sizeof(g));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
cin>>str;
if(str=='#')
f[i][j]=true;
}
ans=0;
sovle(0,0);
cout<<ans<<endl;
}
return 0;
}