牛客练习赛24 E-青蛙(dijkstra || bfs)

 

题目链接:https://www.nowcoder.com/acm/contest/157/E

       这道题其实就是求从0到n的最短路,可以用最dij去写,就是初始化的时候需要点改动,剩下的就是模板。用dij写完以后我感觉还能用bfs去写,能走的路都设为1,不能走的都设为0或-1就好了,然后跑一遍bfs,试着交了一发,果然bfs可写...


AC代码(dijkstra):

#include 
#include 
#include 
#define maxn 235
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int pre[maxn][maxn];
 
void init(){
    memset(pre,inf,sizeof(pre));
    for(int i=0;i dis[flag] + pre[flag][j]){
                dis[j] = dis[flag] + pre[flag][j];
            }
        }
    }
    printf("%d\n",dis[n]);
}
 
int main()
{
    scanf("%d%d",&n,&m);
    init();
    for(int i=0;i

AC代码(bfs):

#include 
#include 
#include 
#include 
#define maxn 235
#define inf 0x3f3f3f3f
using namespace std;
struct Node{
    int x,step;
}Now,Next,S,E;
int n,m;
int pre[maxn][maxn];
 
void init(){
    memset(pre,-1,sizeof(pre));
    for(int i=0;i q;
    S.x = 0;
    S.step = 0;
    q.push(S);
    while(!q.empty()){
        Now = q.front();
        q.pop();
        if(Now.x == n){
            return Now.step;
        }
        for(int i=0;i<=n;i++){
            if(pre[Now.x][i] == 1){
                pre[Now.x][i] = -1;
                Next.x = i;
                Next.step = Now.step + 1;
                q.push(Next);
            }
        }
    }
    return -1;
}
 
int main()
{
    scanf("%d%d",&n,&m);
    init();
    for(int i=0;i

 

你可能感兴趣的:(ACM_搜索,ACM_最短路,补题补题补题)