bfs
我跳我跳我跳跳跳
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
有一条直线,上有n个点,编号从0到n-1。当小A站在s点处,每次可以往前跳到s+1,也可以往前跳到s-1(当s-1 >= 0时),也可以调到2*s处。现在问小A最少跳多少次才能跳到点e处。
输入
多组输入。每组输入两个整数s,e(0 <= s,e <= 100,000)。n趋于无穷大。
输出
输出小A从s跳到e的最小次数。
示例输入
5 17
示例输出
4
#include<stdio.h> #include<string.h> int Map[100002]; int mv[100002]; struct N{ int x, ans; } q[100002]; int jx[]={1, -1, 2}; void bfs(int x, int y) { int i, s=0, e=0; struct N t, f; t.x = x, t.ans = 0; q[e++] = t; mv[t.x] = 1; while(s<e) { t = q[s++]; if(t.x == y) { printf("%d\n", t.ans); return ; } for(i=0; i<3; i++) { if(i!=2) f.x = t.x +jx[i]; else if(i==2) f.x = t.x*2; if(0<=f.x && f.x<100000 && mv[f.x] == 0) { f. ans = t.ans + 1; q[e++] = f; mv[f.x] = 1; } } } printf("-1\n"); return ; } int main() { int s, e; while(~scanf("%d %d", &s, &e)) { memset(mv,0,sizeof(mv)); bfs(s, e); } return 0; }
注意:刚开始mv我没清零, 导致错了。 还有if判断条件中 mv [ f.x ] == 0, 我开始打成了mv [ i ],注意哈
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。