码迷,mamicode.com
首页 > 其他好文 > 详细

第三周星期一

时间:2019-09-02 20:59:16      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:问题   mamicode   初始   int   count   arc   算法   tin   运行   

1.跟着视频完整写出了dijkstra的java算法

package qwert;

import java.util.Scanner;

public class M02_Dijkstra {

public static void main(String[] args) {
// TODO Auto-generated method stub
int n,m,x;//n个点m条边,x表示初始点
Scanner cin=new Scanner(System.in) ;//?
n=cin.nextInt();
m=cin.nextInt();
x=cin.nextInt();
int value[][]=new int[n+1][n+1];//存放两点的路径长度?
int dis[]=new int[n+1];//存放初始点第一个点到其他点的最短路径
for(int i=1;i<=n;i++) {
dis[i]=Integer.MAX_VALUE;
for(int j=1;j<=n;j++) {
if(i==j) value[i][j]=0;
else value[i][j] =-1;//两点初始为-1(没有路)
}
}
for(int i=0;i<m;i++) {//输入每条边的长度
int a=cin.nextInt();
int b=cin.nextInt();
int v=cin.nextInt();
value[a][b]=v;
if(a==x) {
dis[b]=v;//至此dis里已经存了初始点到所有点的距离
}

}
search(x,dis,value,n);

}
private static void search(int x,int dis[],int value[][],int n) {
boolean mark[]=new boolean[n+1];
for(int i=1;i<=n;i++) {
mark[i]=false;
}
mark[x]=true;
dis[x]=0;
int count=1;
while(count<=n) {
int loc=0;
int min=Integer.MAX_VALUE;
for (int i=1;i<=n;i++) {
if(!mark[i]&&dis[i]<min) {
min=dis[i];
loc=i;}
}

if(loc==0)break//没有点可以加了
mark[loc]=true;
count++;

for(int i =1;i<=n;i++) {
if(!mark[i]&&value[loc][i]!=-1&&(dis[loc]+value[loc][i]<dis[i])) {
dis[i]=dis[loc]+value[loc][i];
}
}
}
System.out.println("以"+x+"为起点的最短路径");
for(int i =1;i<=n;i++) {
if(dis[i]!=Integer.MAX_VALUE)
System.out.println(i+"最短路径为"+dis[i]);
else System.out.println(i+"没有路");
}

}}

2.问题错误: 找不到或无法加载主类 qwert.M02_Dijkstra,无法运行,百度也看不太懂

部分步骤还没有完全看懂

技术图片

3.计划明天找老师咨询一下为什么无法运行,并且搞懂全部代码。

第三周星期一

标签:问题   mamicode   初始   int   count   arc   算法   tin   运行   

原文地址:https://www.cnblogs.com/pekey/p/11448872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!