HDU2717 Catch That Cow(BFS || 最短路解法,SPFA版)

匿名 (未验证) 提交于 2019-12-03 00:30:01

一种方法是BFS。以N为根,每个点有三个子节点。因为每条边的权值都是1,所以第一次广度搜索到K的时间就是答案。

另一种解法是最短路。求N到K的单源最短路即可。

//93ms 2.9MB #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <string> using namespace std; const int maxn=1e5+100;  int d[maxn]; bool vis[maxn]; int N,K; void spfa() {     memset(d,0x3f,sizeof(d));     memset(vis,false,sizeof(vis));     vis[N]=true;     d[N]=0;     queue<int> que;     que.push(N);     while(!que.empty())     {         int u=que.front();que.pop();         vis[u]=false;///没有负环的话,vis可以不要         int v;         for(int i=0;i<3;i++)         {             if(i==0) v=u+1;             else if(i==1) v=u-1;             else v=u*2;              if(v<0 || v>=maxn) continue;             if(d[v]>d[u]+1)             {                 d[v]=d[u]+1;                 if(!vis[v])                 {                     vis[v]=true;                     que.push(v);                 }             }         }     }     printf("%d\n",d[K]); } int main() {     while(~scanf("%d%d",&N,&K))     {         spfa();     }     return 0; } 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!