zoukankan      html  css  js  c++  java
  • POJ 1321 棋盘问题

    POJ_1321

        这个题目把棋子的坐标依次存进数组里,然后再分别用两个数组记录行和列有哪些已经被占用了,之后便从第一个棋子开始深搜即可,深搜函数带两个参数p

    #include<stdio.h>
    #include
    <string.h>
    int qx[70],qy[70],visx[70],visy[70],m,k,ans;
    char b[70];
    void dfs(int p,int count)
    {
    int i;
    if(count==k)
    {
    ans
    ++;
    return;
    }
    for(i=p;i<m;i++)
    if(!visx[qx[i]]&&!visy[qy[i]])
    {
    visx[qx[i]]
    =1;
    visy[qy[i]]
    =1;
    dfs(i
    +1,count+1);
    visx[qx[i]]
    =0;
    visy[qy[i]]
    =0;
    }
    }
    int main()
    {
    int i,j,n;
    while(1)
    {
    scanf(
    "%d%d",&n,&k);
    if(n==-1)
    break;
    m
    =0;
    for(i=0;i<n;i++)
    {
    scanf(
    "%s",b);
    for(j=0;j<n;j++)
    if(b[j]=='#')
    {
    qx[m]
    =i;
    qy[m]
    =j;
    m
    ++;
    }
    }
    memset(visx,
    0,sizeof(visx));
    memset(visy,
    0,sizeof(visy));
    ans
    =0;
    dfs(
    0,0);
    printf(
    "%d\n",ans);
    }
    return 0;
    }

      

    countp表示从当前第p个棋子开始往下搜,count表示已经放了count个棋子。

  • 相关阅读:
    HTML 笔记
    JavaScript 学习笔记
    对近期的一些总结
    【 Java 】手速手速~
    【 Java 】 简易交通灯
    【 Art 】小心心~
    scala 标识符案例
    scala 基础类型
    scala 类、字段、方法
    scala 列表
  • 原文地址:https://www.cnblogs.com/staginner/p/2151384.html
Copyright © 2011-2022 走看看