poj 3278 Catch That Cow
2014-03-13 12:56
274 查看
题目大意:
给定一起点n和一终点k,从n点开始每次可以选择到达n+1或n-1或2*n;
求最小的移动次数使得最终到达k点;
本题可用bfs搜索,从起点开始将可以到达的地方全部记录下来,然后又从这些点出发搜索,依次进行下去,直到到达k点为止;
代码如下:
#include<stdio.h>
#include<string.h>
int n,k;
int step[9999999];
int dui[9999999];
int visit[9999999];
int dir[2]={-1,1};
int check(int n)
{
if(n==k)
return 1;
return 0;
}
int main()
{
int i,j,l,m,s;
int r=0,p=0,o=0;
scanf("%d%d",&n,&k);
dui[r++]=n;
if(check(n))
{
printf("0\n");
return 0;
}
while(p<r)
{
m=dui[p++];
visit[m]=1;
for(i=0;i<3;i++)
{
s=m;
if(i==2)
{
s=2*s;
}
else
{
s+=dir[i];
}
if(check(s))
{
printf("%d\n",step[m]+1);
return 0;
}
if(s>=0&&visit[s]==0&&s<1000000)
{
dui[r++]=s;
visit[s]=1;
step[s]=step[m]+1;
}
}
}
}
给定一起点n和一终点k,从n点开始每次可以选择到达n+1或n-1或2*n;
求最小的移动次数使得最终到达k点;
本题可用bfs搜索,从起点开始将可以到达的地方全部记录下来,然后又从这些点出发搜索,依次进行下去,直到到达k点为止;
代码如下:
#include<stdio.h>
#include<string.h>
int n,k;
int step[9999999];
int dui[9999999];
int visit[9999999];
int dir[2]={-1,1};
int check(int n)
{
if(n==k)
return 1;
return 0;
}
int main()
{
int i,j,l,m,s;
int r=0,p=0,o=0;
scanf("%d%d",&n,&k);
dui[r++]=n;
if(check(n))
{
printf("0\n");
return 0;
}
while(p<r)
{
m=dui[p++];
visit[m]=1;
for(i=0;i<3;i++)
{
s=m;
if(i==2)
{
s=2*s;
}
else
{
s+=dir[i];
}
if(check(s))
{
printf("%d\n",step[m]+1);
return 0;
}
if(s>=0&&visit[s]==0&&s<1000000)
{
dui[r++]=s;
visit[s]=1;
step[s]=step[m]+1;
}
}
}
}
相关文章推荐
- POJ 3278 Catch That Cow
- [kuangbin带你飞]专题1 简单搜索 C - Catch That Cow POJ - 3278
- BFS-POJ-3278-Catch That Cow
- POJ 3278 Catch That Cow(这些年追大牛的我们,BFS)
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow (Java,bfs)
- Catch That Cow POJ - 3278
- poj 3278 catch that cow (广度优先BFS)
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow bfs
- poj 3278 Catch That Cow bfs
- POJ - 3278----Catch That Cow
- POJ 【3278】 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow 广度优先算法
- [kuangbin带你飞]专题一 简单搜索-C - Catch That Cow POJ - 3278
- POJ 3278 Catch That Cow