• POJ 1321


    http://poj.org/problem?id=1321

    一道深搜的题目,和那个POJ3740有点相类似。

    也是到了现在我才知道原来深搜也有几种套路的,以前我的都是用队列来做,那个是不需要记住什么的,只需要标记就行,但现在的做的都好像与路径有点关系。需要用到回溯,这让我还是有点懵的。

    题目是中文题。就是在棋盘放置棋子,但那个每一行每一列只可以放一个棋子。且只可以放在#的位置,求一共有多少种放法。

     Memory:312K c++ runtime:32MS 
    1
    #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 5 char str[10][10]; 6 int m,k,ans; 7 int used[10]; //用来记录那一列是不是放了棋子的。 8 9 int dfs(int row,int num) //row代表行,num代表有还有多少个棋子需要放 10 { 11 for(int j=0;j<m;j++) //循环找出这一行一共有几个地方可以放 12 { 13 if(str[row][j]=='#'&&!used[j]){    14 if(num==1)    //如果还有最后一个棋子了。那么答案就就加一。 15 ans++; 16 else{ 17 used[j]=1; //如果还有多个,首先假设使用了这一个棋子,然后在进行下一步的试探,看这个是不是可用 18 for(int i=row+1;i<m;i++) 19 dfs(i,num-1); 20 used[j]=0; 21 } 22 } 23 } 24 } 25 26 int main() 27 { 28 while(scanf("%d%d",&m,&k)&&(m!=-1||k!=-1)) 29 { 30 for(int i=0;i<m;i++) 31 scanf("%s",str[i]); 32 ans=0; 33 memset(used,0,sizeof(used)); 34 for(int i=0;i<m;i++) 35 dfs(i,k); 36 printf("%d ",ans); 37 } 38 }
  • 相关阅读:
    学习笔记
    .net $&替换正则查找到的内容
    sql 常用日期函数
    2010学习计划
    优化存储过程
    sql server 标量值函数
    job88数据库操作
    .net 调用有返回值的存储过程
    GridView 18种操作
    SQLite的局限性
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5513391.html
Copyright © 2020-2023  润新知