ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【简单的dijkstar】PTA 7-3 最短路径 (20分)

2021-01-29 20:32:35  阅读:311  来源: 互联网

标签:20 int end had PTA start dijkstar between path


发现没什么人写这种基础代码的blog,不带教学记录一下自己写的。
明明是简单的东西但是有的时候脑子就是转不过来,乌鱼子

最短路径 (20分)

给定一个有N个顶点和E条边的无向图,顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在,给出最短路径长度。 这里定义顶点到自身的最短路径长度为0。 进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:
输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。 随后E行,每行给出一条边的两个顶点。每行中的数字之间用1空格分隔。 最后一行给出两个顶点编号i,j(0≤i,j<N),i和j之间用空格分隔。

输出格式:
如果i和j之间存在路径,则输出"The length of the shortest path between i and j is X.",X为最短路径长度, 否则输出"There is no path between i and j."。

输入样例1:

7 6
0 1
2 3
1 4
0 2
1 3
5 6
0 3

输出样例1:

The length of the shortest path between 0 and 3 is 2.

输入样例2:

7 6
0 1
2 3
1 4
0 2
1 3
5 6
0 6

输出样例2:

There is no path between 0 and 6.

代码
基础dijkstar实现

#include <stdio.h>
int m,n,end,had[11]={0},len[11]={0},path[11][11]={0};
void bdPath(int start,int pathL){
    int i,size=0,temp[11];
    for(i=0;i<m;i++){
        if(path[start][i]==1&&had[i]==0){
            len[i]=pathL;
            had[i]=1;
            temp[size++]=i;
            //printf("%d %d\n",i,pathL);
            if(i==end)
                return;
        }
    }
    while(size--){
        bdPath(temp[size],pathL+1);
    }
}
int main(){
    int i,a,b;
    scanf("%d %d",&m,&n);
    for(i=0;i<n;i++){
        scanf("%d %d",&a,&b);
        path[a][b]=path[b][a]=1;
    }
    int start;
    scanf("%d %d",&start,&end);
    had[start]=1;
    len[start]=0;
    bdPath(start,1);
    if(had[end]==0){
        printf("There is no path between %d and %d.",start,end);
    }
    else{
        printf("The length of the shortest path between %d and %d is %d.",start,end,len[end]);
    }
}

标签:20,int,end,had,PTA,start,dijkstar,between,path
来源: https://blog.csdn.net/Elly_Sware/article/details/113405626

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有