您的位置:首页 > 其它

Catch That Cow 2007年USACO(最短路)

2016-05-15 12:26 302 查看
竟然一做最短路就以为是要Dijkstra

这题的最短路就是广搜来做的

#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std;
int n,k;
const int maxn=100000;
int step[maxn+5];
bool hash[maxn+5];//哈希判重,一个地方只到一次
queue<int> q;
int main()
{
scanf("%d%d",&n,&k);
if (k<=n) {printf("%d",n-k);exit(0);}//exit可以这么用
memset(hash,false,sizeof(hash));
hash
=true;

q.push(n);
while (!q.empty())
{
int u=q.front();
q.pop();
for (int i=1;i<=3;i++)
{
int v;
if (i==1) v=u-1;
if (i==2) v=u+1;
if (i==3) v=u*2;//这样的代码技巧
if (v>maxn||v<0||hash[v]) continue;//注意越界,还有hash判重
hash[v]=true;step[v]=step[u]+1;
q.push(v);//更新,入队
if (v==k) {printf("%d",step[k]);return 0;} //找到输出
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: