Skip to content

Commit d435be9

Browse files
committed
commit
1 parent 115d6a7 commit d435be9

File tree

166 files changed

+17724
-9
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

166 files changed

+17724
-9
lines changed

.metadata/.log

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,88 @@ Command-line arguments: -os linux -ws gtk -arch x86_64
374374

375375
!ENTRY org.eclipse.core.resources 2 10035 2017-10-03 09:41:52.109
376376
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
377+
378+
!ENTRY org.eclipse.ui 4 0 2017-10-03 14:48:58.507
379+
!MESSAGE Unhandled event loop exception
380+
!STACK 0
381+
java.lang.IllegalArgumentException: Argument cannot be null
382+
at org.eclipse.swt.SWT.error(SWT.java:4342)
383+
at org.eclipse.swt.SWT.error(SWT.java:4276)
384+
at org.eclipse.swt.SWT.error(SWT.java:4247)
385+
at org.eclipse.swt.widgets.Widget.error(Widget.java:480)
386+
at org.eclipse.swt.widgets.Control.removeMouseMoveListener(Control.java:1989)
387+
at org.eclipse.jface.text.AbstractInformationControl$5.mouseUp(AbstractInformationControl.java:403)
388+
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:220)
389+
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
390+
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276)
391+
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3562)
392+
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3186)
393+
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
394+
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
395+
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
396+
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
397+
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
398+
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
399+
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
400+
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
401+
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
402+
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
403+
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
404+
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
405+
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
406+
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
407+
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
408+
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
409+
at java.lang.reflect.Method.invoke(Method.java:606)
410+
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
411+
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
412+
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
413+
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
414+
415+
!ENTRY org.eclipse.ui 4 0 2017-10-03 16:12:08.646
416+
!MESSAGE Unhandled event loop exception
417+
!STACK 0
418+
org.eclipse.swt.SWTException: Widget is disposed
419+
at org.eclipse.swt.SWT.error(SWT.java:4361)
420+
at org.eclipse.swt.SWT.error(SWT.java:4276)
421+
at org.eclipse.swt.SWT.error(SWT.java:4247)
422+
at org.eclipse.swt.widgets.Widget.error(Widget.java:480)
423+
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:417)
424+
at org.eclipse.swt.widgets.Control.redraw(Control.java:3443)
425+
at org.eclipse.swt.widgets.Link.gtk_event_after(Link.java:353)
426+
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1768)
427+
at org.eclipse.swt.widgets.Control.windowProc(Control.java:5116)
428+
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4377)
429+
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
430+
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8317)
431+
at org.eclipse.swt.widgets.Control.dragDetect(Control.java:2272)
432+
at org.eclipse.swt.widgets.Control.dragDetect(Control.java:2217)
433+
at org.eclipse.swt.widgets.Control.dragDetect(Control.java:2170)
434+
at org.eclipse.swt.custom.StyledText.checkDragDetect(StyledText.java:1966)
435+
at org.eclipse.swt.custom.StyledText.handleMouseDown(StyledText.java:5986)
436+
at org.eclipse.swt.custom.StyledText$7.handleEvent(StyledText.java:5632)
437+
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
438+
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276)
439+
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3562)
440+
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3186)
441+
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
442+
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
443+
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
444+
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
445+
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
446+
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
447+
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
448+
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
449+
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
450+
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
451+
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
452+
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
453+
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
454+
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
455+
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
456+
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
457+
at java.lang.reflect.Method.invoke(Method.java:606)
458+
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
459+
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
460+
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
461+
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
package minimal_spanning_tree;
2+
3+
import java.io.InputStream;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Scanner;
10+
11+
12+
13+
/**
14+
* 最小生成树的prim算法,从一个节点出发,每次找到与所有加入的节点相邻的节点,权重最小的节点加入,不能形成环。
15+
*
16+
* @author liyafei
17+
*
18+
*/
19+
public class MSTPrim {
20+
21+
List list=new ArrayList<>();
22+
int count=1;
23+
double[][] weights;
24+
25+
class Node{
26+
Node link;
27+
Node pre;
28+
int weight;
29+
int key;
30+
int start;
31+
int end;
32+
}
33+
34+
/**
35+
* prim 算法求最小生成树,给定根节点,开始找相邻节点的最小值,算法每一步在连接集合A和A之外的节点的所有边中
36+
* 选择一条轻量级边加入到A中
37+
* 用一个列表将遍历过的轻量级边的节点存储起来,然后看新的轻量级边的两点是否在列表中,如果在,就不加入。
38+
* @param r 根节点
39+
* 注意:图的矩阵表示形式是对称的,可以利用
40+
*/
41+
public void mstprim(int r){
42+
List list2=new ArrayList<>();
43+
for (int i = 0; i < weights.length; i++) {
44+
Node node=(Node) list.get(i);
45+
node.key=Integer.MAX_VALUE;
46+
node.pre=null;
47+
}
48+
// Node node=(Node) list.get(r);
49+
// node.key=0;
50+
51+
// double[] arr=weights[r-1]; //取出给定顶点相邻节点的权重值,然后找出几行几列。排序
52+
// double min = Double.MAX_VALUE;
53+
// int index=0; //角标值
54+
// for (int i = 0; i < arr.length; i++) {
55+
// if(arr[i]>0 && arr[i]<min){
56+
// min=arr[i];
57+
// index=i;
58+
// }
59+
// }
60+
//(r,index)这条线被包括进来了
61+
// list2.add(r);
62+
// if(!list2.contains(index)){
63+
// list2.add(index);
64+
// }
65+
Map map=new HashMap();
66+
list2.add(r);
67+
while(list2.size()<2){
68+
double minest=Double.MAX_VALUE;
69+
int index2=0;
70+
for (int i = 0; i < list2.size(); i++) {
71+
double[] arr2=weights[(int) list2.get(i)];
72+
int key=(int) list2.get(i);
73+
for (int j = 0; j < arr2.length; j++) {
74+
if(arr2[j]>0 && arr2[j]<minest){
75+
System.out.println(arr2[j]);
76+
if(!list2.contains(j)){
77+
minest=arr2[j];
78+
index2=j;
79+
map.put(key, index2);
80+
// System.out.println(index2);
81+
}
82+
}
83+
}
84+
}
85+
list2.add(index2);
86+
}
87+
88+
89+
// double[] weis=weights[index];
90+
// double[][] afteriter=new double[2][weights.length];
91+
// afteriter[0]=arr;
92+
// afteriter[1]=weis;
93+
for (int i = 0; i < list2.size(); i++) {
94+
System.out.println("key "+list2.get(i));
95+
// System.out.println("value "+map.get(list2.get(i)));
96+
}
97+
// System.out.println(list2.size());
98+
// System.out.println(min);
99+
// System.out.println(index);
100+
//
101+
}
102+
103+
/**
104+
* 得到创建的带有权重的图,读出相邻节点之间的距离,然后存储到二维数组weights中。
105+
* 权重图的大小比节点多1,但是角标为0的位置都没用,为了处理存储的位置与节点的编号相一致
106+
*/
107+
public double[][] getWeightArray(){
108+
weights=new double[list.size()][list.size()];
109+
for (int i = 0; i < list.size(); i++) {
110+
Node node=(Node) list.get(i);
111+
while(node!=null){
112+
int row=node.start-1;
113+
int col=node.end-1;
114+
double weight=node.weight;
115+
weights[row][col]=weight;
116+
node=node.link;
117+
}
118+
119+
}
120+
return weights;
121+
}
122+
123+
/**
124+
* 打印权重图
125+
*/
126+
public void printWeightGraph(){
127+
double[][] weightsArray=getWeightArray();
128+
for (int i = 0; i < weightsArray.length; i++) {
129+
130+
double[] wa=weightsArray[i];
131+
for (int j = 0; j < wa.length; j++) {
132+
System.out.print(wa[j]+" ");
133+
}
134+
System.out.println();
135+
}
136+
System.out.println();
137+
}
138+
139+
/**
140+
* 先构建带有权重的无向图。
141+
*/
142+
public List createGraph(){
143+
Class clazz=this.getClass();
144+
InputStream ins=clazz.getResourceAsStream("/data.txt");
145+
Scanner scanner=new Scanner(ins);
146+
147+
while(scanner.hasNextLine()){
148+
String s1=scanner.nextLine();
149+
Scanner oneLine=new Scanner(s1);
150+
Node newNode;
151+
Node first=null;
152+
Node last=null;
153+
while(oneLine.hasNext()){
154+
String s2=oneLine.next();
155+
int end=Integer.parseInt(s2);
156+
if(end==999){
157+
break;
158+
}
159+
newNode=new Node();
160+
if(first!=null && oneLine.hasNext()){
161+
String s3=oneLine.next();
162+
int weight=Integer.parseInt(s3);
163+
newNode.weight=weight;
164+
}
165+
newNode.start=count;
166+
newNode.end=end;
167+
newNode.link=null;
168+
if(first==null){
169+
first=newNode;
170+
last=newNode;
171+
}else{
172+
last.link=newNode;
173+
last=newNode;
174+
}
175+
}
176+
list.add(first);
177+
count++;
178+
}
179+
return list;
180+
}
181+
182+
}

0 commit comments

Comments
 (0)