链接:http://poj.org/problem?id=1321
DFS问题.
AC code
#include<iostream>
#include <cstring>
#include <string>
using namespace std;
int n,k,Maze[9][9],sum,visited[9]; //列标记数组
void DFS(int row,int s)
{
if(s==k) { sum++;return;}
if(row==n) return;
for(int i=0;i<n;++i)
{
if(Maze[row][i]&&!visited[i])
{
visited[i]=true;
DFS(row+1,s+1);
visited[i]=false;
}
}
DFS(row+1,s);
}
int main()
{
while (cin>>n>>k)
{
if(n==-1&&k==-1) break;
int i,j;
char temp;
memset(visited,0,sizeof(visited));
memset(Maze,0,sizeof(Maze));
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
cin>>temp;
if(temp=='#') Maze[i][j]=1;
}
}
sum=0;
DFS(0,0);
cout<<sum<<endl;
}
}