这道题目就是一个利用深度优先搜索的例子










//初始化
void setSize(int number)
{
n = number;
maxn = 0;
}

void initData()

...{
for(int i = 0; i < n; ++i)

...{
for(int j = 0; j < n; ++j)

...{
cin>>map[i][j];
}
}
}

bool checkValue(int row, int col)

...{
int i, j;
for(i = row - 1; i >= 0; i--)

...{
if(map[i][col] == 't')
return false;
else if(map[i][col] == 'X')
break;
}
for(j = col - 1; j >= 0; j--)

...{
if(map[row][j] == 't')
return false;
else if(map[row][j] == 'X')
break;
}
return true;
}

void search(int size, int cnt)

...{
int row, col;
if(size == n * n)

...{
if(cnt > maxn)
maxn = cnt;
return;
}
row = size / n;
col = size % n;
if(map[row][col] == '.' && checkValue(row, col))

...{
map[row][col] = 't';
search(size + 1, cnt + 1);
map[row][col] = '.';
}
search(size + 1, cnt);
}

int getMax()

...{
return maxn;
}
}
;

int
main()

...
{
int n;
CFireNet firenet;
while(cin >> n)

...{
if(n == 0)
break;
firenet.setSize(n);
firenet.initData();
firenet.search(0,0);
cout<<firenet.getMax()<<endl;
}
return 0;
}


























































































