poj 1321 棋盘问题

我的dfs基础。。
简单的dfs。。

#include<stdio.h>
#include<string.h>
char map[9][9];
int flag[9];
int ans;
int n,k;
int count;
void dfs(int x)
{
    if(x>=n)
        return ;
    int i;
    for(i=0;i<n;i++)
    {
        if(flag[i]==0&&map[x][i]=='#')//这个点可放东西//
        {
            flag[i]=1;
            count++;//把东西放在这个点上//
            if(count==k)
                ans++;
            dfs(x+1);
            flag[i]=0;//不把东西放在这个点上//
            count--;
        }
    }
    dfs(x+1);
}
int main()
{
    int i;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        if(n==-1&&k==-1)
            break;
        for(i=0;i<n;i++)
            scanf("%s",map[i]);
        memset(flag,0,sizeof(flag));
        ans=0;
        count=0;
        dfs(0);
        printf("%d\n",ans);
    }
    return 0;
}

但是觉得这题重点已经不是做出了,而是谁的时间少。。
膜拜少于47ms的大神们。。
改良版尝试ing。。

你可能感兴趣的:(poj,DFS)