菜鸟系列——搜索
来源:互联网 发布:阿里云给我打电话 编辑:程序博客网 时间:2024/05/17 21:51
菜鸟就要老老实实重新学起:
DFS、BFS:
优先深度搜索、优先广度搜索,思想很简单,看怎么用了。eg:
POJ3037 Skiing
http://poj.org/problem?id=3037
题意:
一个矩阵各点有不同高度,从 A点到周围4个B点的速度是 V = Va*(2^(Ha-Hb))。
给出初速度,矩阵高,矩阵宽。高度矩阵。
求左上到右下所用最短时间。
思路:
初始高度和速度给出,所以各点的速度其实一定,直接算出。
BFS+优先队列
code:
#define INF 0x3f3f3f3f#define MAX 1000010000000#define N 123int n,m,v;int flag,sum,ave,ans,res;int g[N][N];double mintime[N][N];int dis[4][2] = {{1.0},{-1,0},{0,1},{0,-1}};struct node{ int x,y; double s,t; friend bool operator < (node a, node b) { return a.t > b.t; }}tn;priority_queue<node> q;double bfs(node t){ int i,x,y; node f,h; q.push(t); while(!q.empty()) { f = q.top(); q.pop(); if(f.x==n&&f.y==m) return f.t; for(i=0;i<4;i++) { h = f; h.x+=dis[i][0]; h.y+=dis[i][1]; if(!(h.x>n||h.x<=0||h.y>m||h.y<=0)) { h.s = f.s*pow(2.0,g[f.x][f.y]-g[h.x][h.y]); h.t+=1.0/f.s; if(mintime[h.x][h.y]>h.t) { mintime[h.x][h.y] = h.t; q.push(h); } } } }}int main(){ int i,j,k,kk,t,x,y; while(scanf("%d%d%d",&v,&n,&m)!=EOF&&n) { for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&g[i][j]); for(i=1;i<=n;i++) for(j=1;j<=m;j++) mintime[i][j] = MAX; node start; start.s=v; start.x = start.y = 1; start.t = 0; printf("%.2lf\n",bfs(start)); } return 0;}
POJ3187 Backward Digit Sums
http://poj.org/problem?id=3187
题意:
杨辉三角规则,给与根的大小和三角层数,求最下一行的数字,多解时给出字典序最小的解。思路:
dfs暴搜即可。code:
#define N 12int n,m;int flag,sum,ave,ans,res;int a[N][N];bool vis[N];bool check(){ for(int i=1;i<n;i++) for(int j=0;j<n-i;j++) a[i][j] = a[i-1][j]+a[i-1][j+1]; return a[n-1][0] == m;}void dfs(int now){ if(now == n) { if(check() && flag) { for(int i=0;i<n;i++) printf("%d ",a[0][i]); printf("\n"); flag=0; } return ; } for(int i=1;i<=n;i++) { if(vis[i] && flag) { vis[i] = false; a[0][now] = i; dfs(now+1); vis[i] = true; } }}int main(){ int i,j,k,kk,t,x,y; while(scanf("%d%d",&n,&m)!=EOF&&n) { flag=1; memset(vis,true,sizeof(vis)); dfs(0); } return 0;}
0 0
- 菜鸟系列——搜索
- 菜鸟系列——简单搜索
- 菜鸟系列——KMP
- 菜鸟系列——Sparse Table
- 菜鸟系列——线段树
- 菜鸟系列——划分树
- 菜鸟系列——字典树
- 菜鸟系列——回文串
- 菜鸟系列——最小生成树
- 菜鸟系列——最短路
- 菜鸟系列——强连通分量
- 菜鸟系列——二分图匹配
- 菜鸟系列——置换群
- 菜鸟系列——polya计数法
- 菜鸟系列——欧拉函数
- 菜鸟系列——约瑟夫环
- 菜鸟系列——容斥原理
- 菜鸟系列——双连通分量
- poj 3207 Ikki's Story IV - Panda's Trick 【2-sat 经典建模】
- 讨论“get”和“post”安全性
- Android 第3天 类的复习 图书管理 及 SQLite 基本语法
- hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
- OC_字典
- 菜鸟系列——搜索
- java GC性能优化
- Redhat6.5 配置使用centos的yum源
- 2502 月之数
- 最新Spring集成MyBatis详细教程(一)--ccw
- 将button的click事件作为判断条件
- HDU 5294 Tricks Device(多校2015 最大流+最短路啊)
- TCP/IP 三次握手、四次挥手
- 背包问题