哥哥们啊,帮忙看看:
package 有向图的最短路径;
class DisPar//distance,parentvert
{
int distance ;
int parentvert;
DisPar(int d,int p)
{
distance=d;
parentvert=p;
}
}
class vertex
{
char label;
boolean isintree;
vertex(char lab)
{
label=lab;
isintree=false;
}
}
class Graph
{
vertex vlist[];
DisPar spath[];
final int maxverts=20;
int adjmax[][];
int ntree;
final int infinity=1000;
int nverts;
int currentvert;
int starttocurrent;
Graph()
{
vlist=new vertex[maxverts];
adjmax=new int[maxverts][maxverts];
for(int m=0;m<maxverts;m++)
for(int n=0;n<maxverts;n++)
adjmax[m][n]=infinity;
ntree=0;
nverts=0;
spath=new DisPar[maxverts];
}
void addvertex(char lab)
{
vlist[nverts++]=new vertex(lab);
}
void addedge(int start,int end,int distance)
{
adjmax[start][end]=distance;
}
int getMin()
{
int indexMin=0;
for(int m=0;m<nverts;m++)
{
if(!vlist[m].isintree&&spath[m].distance<infinity)
indexMin=m;
}
return indexMin;
}
void path()//从任意一个顶点到其他顶点的最短路径
{
int starttree=0;
vlist[starttree].isintree=true;
ntree=1;
for(int i=0;i<nverts;i++)
{
spath[i]=new DisPar(i,adjmax[starttree][i]);
}
while(ntree<nverts)
{
int indexMin=getMin();
int minDist=spath[indexMin].distance;
if(minDist==infinity)
{
System.out.println("There are not reachable path");
break;
}
else
{
currentvert=indexMin;
starttocurrent=minDist;
}
vlist[currentvert].isintree=true;
ntree++;
adjust_path();//重新更新树
}
display_paths();//显示路径
ntree=0;
for(int j=0;j<nverts;j++)
vlist[j].isintree=false;
}
void adjust_path()//更新函数
{
int column=1;
while(column<nverts)
{
if(vlist[column].isintree)
{
column++;
continue;
}
int CurrentToFringe=adjmax[currentvert][column];
int StartToFringe=starttocurrent+CurrentToFringe;
int sPathDist=spath[column].distance;
if(StartToFringe<sPathDist)
{
spath[column].parentvert=currentvert;
spath[column].distance=StartToFringe;
}
column++;
}
}
void display_paths()
{
for(int j=0;j<nverts;j++)
{
System.out.println(vlist[j].label+"=");
if(spath[j].distance==infinity)
System.out.println("inf");
else
System.out.print(spath[j].distance);
char parent=vlist[spath[j].parentvert].label;
System.out.print("("+parent+")");
}
System.out.println();
}
}
class testpath
{
public static void main(String[] args)
{
Graph g=new Graph();
g.addvertex('A');
g.addvertex('B');
g.addvertex('C');
g.addvertex('D');
g.addvertex('E');
g.addedge(0,1,50);
g.addedge(0,3,80);
g.addedge(1,2,60);
g.addedge(1,3,90);
g.addedge(3,4,70);
g.addedge(4,1,50);
g.addedge(2,4,40);
g.addedge(3,2,20);
g.path();
g.display_paths();
}
}
在EditPlus里面编译没问题,可是,运行的时候,提示:E:\java\rubbish\DataStructure>java 有向图的最短路径.testpath
A=
0Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1000
at 有向图的最短路径.Graph.display_paths(DisPar.java:124)
at 有向图的最短路径.Graph.path(DisPar.java:89)
at 有向图的最短路径.testpath.main(DisPar.java:148)
帮忙啊,兄弟多谢了。
package 有向图的最短路径;
class DisPar//distance,parentvert
{
int distance ;
int parentvert;
DisPar(int d,int p)
{
distance=d;
parentvert=p;
}
}
class vertex
{
char label;
boolean isintree;
vertex(char lab)
{
label=lab;
isintree=false;
}
}
class Graph
{
vertex vlist[];
DisPar spath[];
final int maxverts=20;
int adjmax[][];
int ntree;
final int infinity=1000;
int nverts;
int currentvert;
int starttocurrent;
Graph()
{
vlist=new vertex[maxverts];
adjmax=new int[maxverts][maxverts];
for(int m=0;m<maxverts;m++)
for(int n=0;n<maxverts;n++)
adjmax[m][n]=infinity;
ntree=0;
nverts=0;
spath=new DisPar[maxverts];
}
void addvertex(char lab)
{
vlist[nverts++]=new vertex(lab);
}
void addedge(int start,int end,int distance)
{
adjmax[start][end]=distance;
}
int getMin()
{
int indexMin=0;
for(int m=0;m<nverts;m++)
{
if(!vlist[m].isintree&&spath[m].distance<infinity)
indexMin=m;
}
return indexMin;
}
void path()//从任意一个顶点到其他顶点的最短路径
{
int starttree=0;
vlist[starttree].isintree=true;
ntree=1;
for(int i=0;i<nverts;i++)
{
spath[i]=new DisPar(i,adjmax[starttree][i]);
}
while(ntree<nverts)
{
int indexMin=getMin();
int minDist=spath[indexMin].distance;
if(minDist==infinity)
{
System.out.println("There are not reachable path");
break;
}
else
{
currentvert=indexMin;
starttocurrent=minDist;
}
vlist[currentvert].isintree=true;
ntree++;
adjust_path();//重新更新树
}
display_paths();//显示路径
ntree=0;
for(int j=0;j<nverts;j++)
vlist[j].isintree=false;
}
void adjust_path()//更新函数
{
int column=1;
while(column<nverts)
{
if(vlist[column].isintree)
{
column++;
continue;
}
int CurrentToFringe=adjmax[currentvert][column];
int StartToFringe=starttocurrent+CurrentToFringe;
int sPathDist=spath[column].distance;
if(StartToFringe<sPathDist)
{
spath[column].parentvert=currentvert;
spath[column].distance=StartToFringe;
}
column++;
}
}
void display_paths()
{
for(int j=0;j<nverts;j++)
{
System.out.println(vlist[j].label+"=");
if(spath[j].distance==infinity)
System.out.println("inf");
else
System.out.print(spath[j].distance);
char parent=vlist[spath[j].parentvert].label;
System.out.print("("+parent+")");
}
System.out.println();
}
}
class testpath
{
public static void main(String[] args)
{
Graph g=new Graph();
g.addvertex('A');
g.addvertex('B');
g.addvertex('C');
g.addvertex('D');
g.addvertex('E');
g.addedge(0,1,50);
g.addedge(0,3,80);
g.addedge(1,2,60);
g.addedge(1,3,90);
g.addedge(3,4,70);
g.addedge(4,1,50);
g.addedge(2,4,40);
g.addedge(3,2,20);
g.path();
g.display_paths();
}
}
在EditPlus里面编译没问题,可是,运行的时候,提示:E:\java\rubbish\DataStructure>java 有向图的最短路径.testpath
A=
0Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1000
at 有向图的最短路径.Graph.display_paths(DisPar.java:124)
at 有向图的最短路径.Graph.path(DisPar.java:89)
at 有向图的最短路径.testpath.main(DisPar.java:148)
帮忙啊,兄弟多谢了。
解决方案 »
- STRUTS2 数据重复绑定
- 离开eclipse,等工具,怎么办?
- <input>的value不用submit怎么传给jsp
- java下关于字符串中英文混合问题
- String awardnum = rs.getString(1); 或 String awardnum = rs.getString("number");错误
- Struts:如何实现行交替???
- 数据库语句问题!急
- 求救~求救~访问XML源中的URL所需要的用户名和密码在哪儿配置?
- 关于转发过程中的事务问题,颇具代表性,请大家给个说法
- 菜鸟提问:我的页面上有N个INPUT框,都是顺序排开的。我想实现用回车键来顺序切换输入焦点?请问如何实现?还有,如何实现动态生成页面元
- 高分求救 点击获取行号,然后在另外一个框架中点击删除,删除该行和对应的数据中的内容
- 关于字符串转码问题.
楼主【fwloveyou】截止到2008-08-03 17:47:33的历史汇总数据(不包括此帖):
发帖的总数量:20 发帖的总分数:140 每贴平均分数:7
回帖的总数量:6 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:19 结贴的总分数:110
无满意结贴数:16 无满意结贴分:470
未结的帖子数:1 未结的总分数:30
结贴的百分比:95.00 % 结分的百分比:78.57 %
无满意结贴率:84.21 % 无满意结分率:427.27%
值得尊敬
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=fwloveyou
g.addvertex('A');
g.addvertex('B');
g.addvertex('C');
g.addvertex('D');
g.addvertex('E');
g.addedge(0,1,50);
g.addedge(0,3,80);
g.addedge(1,2,60);
g.addedge(1,3,90);
g.addedge(3,4,70);
g.addedge(4,1,50);
g.addedge(2,4,40);
g.addedge(3,2,20);
,输出应该是
A=inf(A) B=50(A) C=100(D) D=80(A) E=140(c)才对呀,
是不是path()里面,查了老半天找不到原因