POJ1321棋盘问题
题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
 Input
 输入含有多组测试数据.每组数据的第一行是两个正整数n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目.n<= 8,k<= n 
当为-1 -1时表示输入结束。 
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31).
Sample Input
2 1
 # .
 . #
 
4 4
 . . . #
 . . # .
 . # . .
 # . . .
-1 -1
Sample Output
2
1

#include <iostream>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
int n,k;
char map[10][10];
int vis[10];
int ans,cnt;
void dfs(int x){if(cnt==k){ans++;return ;}if(x>n)return ;for(int i=1;i<=n;++i){if(x>=1&&x<=n&&map[x][i]=='#'&&!vis[i]){cnt++;vis[i]=1;dfs(x+1);cnt--;vis[i]=0;}}dfs(x+1);return ;
}
int main(){while(scanf("%d%d",&n,&k)){if(n==-1||k==-1){break;}for(int i=1;i<=n;++i)scanf("%s",map[i]+1);memset(vis,0,sizeof(vis));ans=0,cnt=0;dfs(1);cout<<ans<<endl;}return 0;
}

POJ2251
题目大意:给一个三维图,可以前后左右上下6种走法,走一步1分钟,求最少时间(其实就是最短路)
分析:DFS的话复杂度为O(6^n)会TLE)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
char map[35][35][35];
int vis[35][35][35];
int X,Y,Z,sx,sy,sz,ex,ey,ez;
int dir[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};int step[35][35][35];
struct node
{int x,y,z;
};
int bfs()
{node p,next;queue<node> Q;p.x = sx,p.y = sy,p.z = sz;step[sx][sy][sz]=0;vis[sx][sy][sz] = 1;Q.push(p);while(!Q.empty()){p = Q.front();Q.pop();if(map[p.x][p.y][p.z]=='E')return step[ex][ey][ez];//p.step;vis[p.x][p.y][p.z]=1;for(int i = 0; i<6; i++){int dx = p.x+dir[i][0];int dy = p.y+dir[i][1];int dz = p.z+dir[i][2];//if(check(next.x,next.y,next.z))if(vis[dx][dy][dz]||map[dx][dy][dz]=='#'||dx<0||dx>=X||dy<0||dy>=Y||dz<0||dz>=Z)continue;vis[dx][dy][dz] = 1;next.x=dx,next.y=dy,next.z=dz;step[dx][dy][dz]=step[p.x][p.y][p.z]+1;//next.step = p.step+1;Q.push(next);}}return 0;
}int main()
{int i,j,r;while(scanf("%d%d%d",&X,&Y,&Z),X+Y+Z){for(i = 0; i<X; i++){for(j = 0; j<Y; j++){scanf("%s",map[i][j]);for(r = 0; r<Z; r++){if(map[i][j][r] == 'S'){sx = i,sy = j,sz = r;}else if(map[i][j][r] == 'E'){ex = i,ey = j,ez = r;}}}}memset(vis,0,sizeof(vis));int ans;ans = bfs();if(ans)printf("Escaped in %d minute(s).\n",ans);elseprintf("Trapped!\n");}return 0;
}

POJ3278  Catch That Cow
FJ要抓奶牛。
       开始输入N(FJ的位置)K(奶牛的位置)。
        FJ有三种移动方法:1、向前走一步,耗时一分钟。
                          2、向后走一步,耗时一分钟。
                          3、向前移动到当前位置的两倍N*2,耗时一分钟。
问FJ抓到奶牛的最少时间。奶牛不会动。

#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=100001;
bool vis[maxn];
int step[maxn];
void bfs(int n,int k)
{memset(step,0,sizeof(step));memset(vis,false,sizeof(vis));queue <int> q;int p,tmp;q.push(n);step[n]=0;vis[n]=true;while(!q.empty())  {p=q.front();q.pop();if(p==k){printf("%d\n",step[p]);return ;}for(int i=0;i<3;i++)     {if(i==0) tmp=p-1;else if(i==1) tmp=p+1;else tmp=p*2;if(tmp<0 || tmp>=maxn) continue;if(!vis[tmp])  {q.push(tmp);step[tmp]=step[p]+1;vis[tmp]=true;}}}
}
int main()
{int n,k;while(scanf("%d%d",&n,&k)!=EOF){if(n>=k) printf("%d\n",n-k);elsebfs(n,k);}return 0;
}

POJ1426   给一个数n,让你找出一个只有1,0,组成的十进制数,要求是找到的数可以被n整除。

 #include <iostream>#include<cstdio>#include <iostream>#include <cstring>#include <queue>#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int maxn=1e6+10;int n;
void bfs(){queue<ll> q;ll tmp;q.push(1);while(!q.empty()){tmp=q.front();q.pop();if(tmp%n==0){printf("%lld\n",tmp);return ;}q.push(tmp*10);q.push(tmp*10+1);}
}
int main(){while(scanf("%d",&n)!=EOF){if(n==0)break;bfs();}return 0;
}

【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】相关推荐

  1. POJ1321 棋盘问题(DFS)

    深度搜索,但是要注意搜索的方式: 本文给出两份代码,一份是AC代码,一份是超时的,你们感受下. 从第一行开始,对于每一行,搜索整行,如果有'#',标记,然后,则搜索下一行. AC代码: /*POJ13 ...

  2. POJ1321 棋盘问题

                                                                                            棋盘问题 Time Li ...

  3. POJ1321(棋盘问题)

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  4. POJ3278Catch That Cow(BFS)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 70652   Accepted: 22216 ...

  5. poj1321棋盘问题

    题目链接 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...

  6. POJ-3278-Catch That Cow

    链接:https://vjudge.net/problem/POJ-3278 题意: 给定n,k.有三种操作n-1,n+1,n*2. 找到从n到k的最少步骤. 思路: BFS 代码: #include ...

  7. POJ2251Dungeon Master

    http://poj.org/problem?id=2251 题意 : 就是迷宫升级版,从以前的一个矩阵也就是一层,变为现在的L层," . "是可以走,但是"#" ...

  8. POJ2251-Dungeon Master

    题目链接:点击打开链接 Description You are trapped in a 3D dungeon and need to find the quickest way out! The d ...

  9. POJ1321 Bailian1321 棋盘问题【DFS】

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52525   Accepted: 25387 Descriptio ...

最新文章

  1. 2020-10-29 PYTORCH与Tensorflow速查表
  2. #define 用法
  3. servlet生命周期
  4. 综合使用union和limit区分结果并限制返回结果集的条数
  5. 挑战程序猿---三角形
  6. uboot更改gpio电平_ECBM系列教程4:单片机的手和脚——GPIO
  7. html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别
  8. UI5 repository mapping and Component-preload.js UI5RepositoryPathMapping.xml
  9. Mybatis源码分析第一天------Mybatis实用篇
  10. Java面试题和答案
  11. 修改视频属性中的'修改时间'
  12. Win10电脑时间无法同步解决方法
  13. 外省市机动车驾驶证换领本市机动车驾驶证
  14. 创造力/创新思维的阻碍
  15. 前缀和的n个神奇操作
  16. linux查看内存命令(查看进程虚拟内存)free命令、vmstat命令、pmap命令(free指令、vmstat指令、pmap指令)
  17. USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
  18. 577. 员工奖金 难度:简单
  19. Java字符串:valueOf() 方法
  20. 电缆标识牌怎么填写规范清晰不褪色

热门文章

  1. C#精华面试题及答案 三
  2. [转]十天学习PHP之第一天(PHP)----基础知识
  3. 大道至简 23种模式一点就通
  4. Microsoft Office SharePoint Server 2007 Starter Page
  5. HP QC IE11不支持( win7 64位 无法安装)解决方法
  6. SSIS中代码页(Code Page)问题
  7. 玩转Win10的45个快捷键
  8. 前端模块管理器命令:npm bower
  9. UITableViewCell 取消选中的蓝色背景
  10. 前端框架MVC/MVVM分析系列