07-图6 旅游规划 (25分)

#include<iostream>  
#define INF 501
using namespace std;   
bool visited[501]={false}; 
int vdist[501],vcost[501];
int dist[501][501],cost[501][501];
    
void dijstra(int s,int d,int n){
	vdist[s]=0;visited[s]=true;
	for(int i=0;i<n;i++){ //剩余n-1个节点 ,所以n-1次循环 
		//找出未被访问且距离最短的点
		int mindist=INF;
		int minvertex;
		for(int j=0;j<n;j++){
			if(!visited[j] && vdist[j]<mindist){
				mindist=vdist[j];
				minvertex=j;
			}	
		} 
		//标记为访问过
		visited[minvertex]=true; 
		//更新周围节点
		for(int j=0;j<n;j++){
			if(!visited[j] && vdist[minvertex]+dist[minvertex][j]<vdist[j]){
				vdist[j]=vdist[minvertex]+dist[minvertex][j];
				vcost[j]=vcost[minvertex]+cost[minvertex][j];
			}else if(!visited[j] && vdist[minvertex]+dist[minvertex][j]==vdist[j] && vcost[minvertex]+cost[minvertex][j]<vcost[j]){
				vcost[j]=vcost[minvertex]+cost[minvertex][j];
			}
		} 
			
	} 	
}
    
int main(){      
    //freopen("input.txt","r",stdin);    
    int v,e,s,d,v1,v2,curdist,curcost,i,j;
    cin>>v>>e>>s>>d;
    //1、初始化 
    for(i=0;i<v;i++){
    	for(j=0;j<v;j++){
    		dist[i][j]=dist[j][i]=INF;
    		cost[i][j]=cost[j][i]=INF;
		}
	}
    //2、 
    for(i=0;i<e;i++){
    	cin>>v1>>v2>>curdist>>curcost;
		dist[v1][v2]=dist[v2][v1]=curdist;
		cost[v1][v2]=cost[v2][v1]=curcost;    	 	
	}
    //3、 
    for(i=0;i<v;i++){
    		vdist[i]=dist[i][s];
    		vcost[i]=cost[i][s];
	}
	//4、
	dijstra(s,d,v);//s源点,d终点,v顶点数 
	cout<<vdist[d]<<" "<<vcost[d]<<endl; 
	
	return 0;    
}     








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值