文章
11
粉丝
152
获赞
9
访问
36.0k
首先这个题目按照题意是不能用floyd算法的,因为点的个数最大为1000,而floyd算法的复杂度为n*n*n,如果正式上机会超时。
既然已经决定要用迪杰斯特拉算法,那么首先考虑存储方式,这个题目即可以邻接链表,也可以邻接矩阵。
邻接矩阵法:
#include<stdio.h>
#define N 1001
#define MAX 110000000
int dis[N][N]; //表示距离的邻接矩阵
int cost[N][N]; //表示花费的邻接矩阵
int adis[N]; //单点到其他点的距离最小值
int acost[N]; //在距离最小的前提下的花费最小值
bool mark[N]; //是否已经在集合中
void init(int n) //初始化各数组
{
for(int i=1;i<=n;i++) //将距离和花费均设为不可达 即最大。
{
adis[i]=MAX;
acost[i]=MAX;
}
for(int i=1;i<=n;i++) //所有点均不在集合上。
mark[i]=false;
for(int i=1;i<=n;i++){ //对于邻接矩阵,i==j设为0,自己到自己必定不需要消耗,不相等设为无限大
for(int j=1;j<=n;j++){
if(i==j) {
dis[i][j]=0;
cost[i][j]=0;
}
else
{
dis[i][j]=MAX;
cost[i][j]=MAX;
}
}
}
}
int main()
{
int n,m; //点数,边数
int start,over; //起点,终点。
while(~scanf("%d%d",&n,&am...
登录后发布评论
暂无评论,来抢沙发