图论:dijstra

题目来自:点击这里
代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[205][205],n;
int dis[205],use[205];
int main(){
	cin>>n;
	for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            if(i == j)
                a[i][j] = 0;
            else
                a[i][j] = 1e8;
        }
    }
    for(int i=1;i<=n;i++){
    	for(int j=i+1;j<=n;j++){
    		cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++) dis[i]=1e8;
	dis[1]=0;use[1]=1;
	for(int i=2;i<=n;i++){
		int min=1e8,minx=1;
		for(int j=2;j<=n;j++){
			if(use[j]==0&&dis[j]<min){
				min=dis[j];
				minx=j;
			}
		}
		use[minx]=1;
		for(int j=1;j<=n;j++){
			if(dis[j]>dis[minx]+a[minx][j])
				dis[j]=dis[minx]+a[minx][j];
		}
	}
	cout<<dis[n];
    return 0;
}

题目来自:点击这里
代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[2505][2505],n,m,k;
int x,y;
int dis[2505],use[2505];
int main(){
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            if(i == j)
                a[i][j] = 0;
            else
                a[i][j] = 1e8;
        }
    }
    for(int i=1;i<=m;i++){
    	cin>>x>>y>>k;
    	a[x][y]=min(a[x][y],k);
    	a[y][x]=min(a[y][x],k);
	}
	for(int i=1;i<=n;i++) dis[i]=1e8;
	dis[1]=0;use[1]=1;
	for(int i=2;i<=n;i++){
		int min=1e8,minx=1;
		for(int j=2;j<=n;j++){
			if(use[j]==0&&dis[j]<min){
				min=dis[j];
				minx=j;
			}
		}
		use[minx]=1;
		for(int j=1;j<=n;j++){
			if(dis[j]>dis[minx]+a[minx][j])
				dis[j]=dis[minx]+a[minx][j];
		}
	}
	cout<<dis[n];
    return 0;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读