poj 1321

链接

dfs,

由于两处小小的错误,导致浪费好多时间

按行搜索,然后在把依搜索的列标记一下

 

#include <cstdio>

#include <cstring>

using namespace std;

bool visi[100];

bool flag[100][100];

int ans,cnt,n,k;

void dfs(int a)

{

    if(cnt==k) {ans++;return ;} //k写成n了 

    if(a==n) return ;

    int i;

    for(i=0;i<n;i++)

    {

        if(!visi[i]&&flag[a][i])

        {

            cnt++;

            visi[i]=true;

            dfs(a+1);

            cnt--;

            visi[i]=false;

        }

    }

    dfs(a+1);

}

int main()

{

    int i,j;

    char s[10];

    //freopen("1.txt","r",stdin);

    while(scanf("%d%d",&n,&k)!=EOF)

    {

        if(n==-1&&k==-1)

            break;



        memset(visi,false,sizeof(visi));

        memset(flag,false,sizeof(flag));

        cnt=0;ans=0;

        for(i=0;i<n;i++)

        {

            scanf("%s",s);

            for(j=0;j<n;j++) //n写成k了

            {

                if(s[j]=='#')

                    flag[i][j]=true;

                  //  printf("%c",s[j]);

            }

        }

        dfs(0);

        printf("%d\n",ans);

    }

    return 0;

}


你可能感兴趣的:(poj)