HDU 2717 深搜第一题、

题意:求n到k的最小路径,  n有三种变法 n+1,n-1或者2*n;

贴个广搜的模版在这里把....

总结一下:一般涉及到求最短路的话用深搜

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<queue>
 5 #include<cstring>
 6 using namespace std;
 7 const int qq=1e5+10;
 8 int vis[qq];
 9 int n,k;
10 struct num{
11     int x,step;
12 };
13 int check(int x)
14 {
15     if(x<0||x>qq||vis[x])
16         return 0;
17     return 1;
18 }
19 int bfs(int x)
20 {
21     int i;
22     queue<num>Q;
23     num a,next;
24     a.x=x;
25     a.step=0;
26     vis[x]=1;
27     Q.push(a);
28     while(!Q.empty()){
29         a=Q.front();
30         Q.pop();
31         if(a.x==k)
32             return a.step;
33         next=a;                //将三种情况加入队列、
34         next.x=a.x+1;
35         if(check(next.x)){
36             next.step=a.step+1;
37             vis[next.x]=1;
38             Q.push(next);
39         }
40         next.x=a.x-1;
41         if(check(next.x)){
42             next.step=a.step+1;
43             vis[next.x]=1;
44             Q.push(next);
45         }
46         next.x=a.x*2;
47         if(check(next.x)){
48             next.step=a.step+1;
49             vis[next.x]=1;
50             Q.push(next);
51         }
52     }
53     return -1;
54 }
55 int main()
56 {
57     while(cin >> n >> k){
58         memset(vis,0,sizeof(vis));
59         int ans=bfs(n);
60         cout << ans << endl;
61     }
62 } 
时间: 2024-12-21 17:55:22

HDU 2717 深搜第一题、的相关文章

hdu1010-Tempter of the Bone DFS深搜入门题+奇偶剪枝

Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 69699    Accepted Submission(s): 19176 Problem Description The doggie found a bone in an ancient maze, which fascinated him a

hdu 1258(深搜)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1258 Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4012    Accepted Submission(s): 2066 Problem Description Given a specified total t

hdu1426 深搜水题

简单深搜   关键是输入格式问题 #include<stdio.h> #include<iostream> #include<string.h> using namespace std; int line[15][15],row[15][15],mark[5][5][15],map[15][15],num; int leap[100][3]; int dfs(int t) { int i; int a=leap[t][1],b=leap[t][2]; for(i=1;i

hdu1584 深搜水题

牌移动的步数为牌所在位置差的绝对值 这道题用到深搜 每次出差跑牌面为1-9的牌 如果没移动过则尝试移动 如果能移动 就深搜下去 注意回溯 #include<stdio.h> #include<string.h> #include<iostream> using namespace std; int mark[15],num[15],Min; int abs(int a) { return a>0?a:-a; } int dfs(int sum,int coun)

HDU 3720 深搜 枚举

DES:从23个队员中选出4—4—2—1共4种11人来组成比赛队伍.给出每个人对每个职位的能力值.给出m组人在一起时会产生的附加效果.问你整场比赛人员的能力和最高是多少. 用深搜暴力枚举每种类型的人选择情况.感觉是这个深搜写的很机智. 在vector中存结构体就会很慢.TLE.直接存序号就AC了.以后还是尽量少用结构体吧. #include<stdio.h> #include<string.h> #include<map> #include<vector>

HDU 3316 爆搜水题

爆搜水题 模拟扫雷,规则和扫雷一样 给出原图,求在X,Y位置点一下以后的图形,没有弹出的点输出-1,弹出的点输出这个点的数字 从起始点DFS一下即可 #include "stdio.h" #include "string.h" int dir[8][2]={ {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} }; int n; int hash[110][110]; char str[110][110]; i

HDU - 1010 Tempter of the Bone 深搜模板题(DPS)解题报告

Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 88587    Accepted Submission(s): 24116 Problem Description The doggie found a bone in an ancient maze, which fascinated him a

hdu 1010 深搜+剪枝

深度搜索 剪枝 还不是很理解 贴上众神代码 //http://blog.csdn.net/vsooda/article/details/7884772#include<iostream> #include<math.h> using namespace std; char map[10][10]; int N,M,T; int di,dj,escape; int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}}; void dfs(int x,int y,

HDU 1010 深搜+减枝

HDU 1010 /************************************************************************* > File Name: HDU1010.cpp > Author:yuan > Mail: > Created Time: 2014年11月05日 星期三 22时22分56秒 **********************************************************************