怎么把下面这段Java程序改成C或C++,万分感谢!

importjava.util.Random;publicclassAgoPro2_Dijkstra_LinkedList{publicstaticvoidmain(St... import java.util.Random;
public class AgoPro2_Dijkstra_LinkedList {
public static void main(String[] args) {
AdjListGraph alg=new AdjListGraph(5);
alg.printGraph();
System.out.println("All-pair shortest paths:");
printAllPairPaths(alg.headList);}
public static void printAllPairPaths(Node[] hl){
for(int i=0;i<hl.length;i++){
dijkstraAgorithm(hl,i);}
}
public static void dijkstraAgorithm(Node[] hl,int start){
int n=hl.length;
String[] paths=new String[n];
boolean[] visited=new boolean[n];
for(int i=0;i<n;i++){
paths[i]=new String(start+"->"+i);
}
visited[start]=true;
for(int count=1;count<=n-1;count++){
int k=-1;
int min=Integer.MAX_VALUE;
Node index=hl[start];
while(index!=null){
if(!visited[index.getVer()]&&index.getWeight()<min){
min=index.getWeight();
k=index.getVer();
}
index=index.getNext();
}
visited[k]=true;
Node indexK=hl[k].getNext();
while(indexK!=null){
Node indexStart=hl[start].getNext();
while(indexStart!=null){
if(indexStart.getVer()==indexK.getVer()&&indexStart.getWeight()>(min+indexK.getWeight())){
indexStart.setWeight(min+indexK.getWeight());
paths[indexStart.getVer()]=paths[k]+"->"+indexStart.getVer();
}
indexStart=indexStart.getNext();
}
indexK=indexK.getNext();
}
}

for(int i=0;i<n;i++){
System.out.println("Path from "+start+" to "+i+": "+paths[i]);
}
}
}
class AdjListGraph{
int size=0;
Random rand;
Node[] headList;
AdjListGraph(int size){
this.size=size;
rand=new Random();
headList=new Node[size];
headList=createGraph(headList);
}
public Node[] createGraph(Node[] hl){
Node[] tail=new Node[hl.length];
for(int i=0;i<hl.length;i++){
hl[i]=new Node(i,0,null);
tail[i]=hl[i];
}
for(int i=0;i<hl.length;i++){
for(int j=hl.length-1;j>=i;j--){
if(i==j){
continue;
}else{
int value=rand.nextInt(9)+1;
Node node1=new Node(j,value,null);
Node node2=new Node(i,value,null);
tail[i].setNext(node1);
tail[j].setNext(node2);
tail[i]=node1;
tail[j]=node2;
}
}
}
return hl;
}
public void printGraph(){
for(int i=0;i<headList.length;i++){
Node index=headList[i];
while(index!=null){
System.out.print(index.getVer()+","+index.getWeight()+" ");
index=index.getNext();
}
System.out.println();
}
}
}
class Node{
private int ver;
private int weight;
private Node next;
Node(int x,int y,Node next){
this.ver=x;
this.weight=y;
this.next=next;
}
public int getVer() {
return ver;
}
public void setVer(int ver) {
this.ver = ver;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
展开
 我来答
hyfatbd
推荐于2016-01-30 · TA获得超过237个赞
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:117万
展开全部
本人实在无聊,帮你改编一下。。。

//import java.util.Random; 
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std; 

//c++里面没有toString()方法,下面是自己写的将int转化为string的方法 
string int_to_string(int a)
{
    if(a==0) return string(1,'0');
    char arr[20];
    int len=0;
    while(a>0)
    {
        arr[len]=a%10+'0';
        a/=10;
        ++len;
    }
    arr[len]='\0';
    int harf=len/2;
    --len;
    char temp;
    for(int i=0;i<harf;++i)
    {
        temp=arr[i];
        arr[i]=arr[len-i];
        arr[len-i]=temp;
    } 
    return string(arr);
}

class Node{
private:
     int ver;
     int weight;
     Node* next;
public:
     Node(int x,int y,Node* next){
         this->ver=x;
         this->weight=y;
         this->next=next;
     }    
     int getVer() {return ver;}
     void setVer(int ver) {
         this->ver = ver;
     }
     int getWeight() {return weight;}
     void setWeight(int weight) {
         this->weight = weight;
     }
     Node* getNext() {return next;}
     void setNext(Node* next) {
         this->next = next;
     }
};

class AgoPro2_Dijkstra_LinkedList {
public:
    static void printAllPairPaths(Node** hl,int len){
        for(int i=0;i<len;i++){
            dijkstraAgorithm(hl,i,len);
        }
    }
    static void dijkstraAgorithm(Node** hl,int start,int len){
        int n=len;
        string* paths=new string[n];
        bool* visited=new bool[n];
        for(int i=0;i<n;++i) visited[i]=false;
        for(int i=0;i<n;i++){
            paths[i]=paths[i]+int_to_string(start)+"->"+int_to_string(i);
        }
        visited[start]=true;
        for(int count=1;count<=n-1;count++){
            int k=-1;
//            int min=Integer.MAX_VALUE;
            int min = 0x7FFFFFFF;
            Node* index=hl[start];
            while(index!=NULL){
                if(!visited[index->getVer()]&&index->getWeight()<min){
                    min=index->getWeight();
                    k=index->getVer();
                }
                index=index->getNext();
            }      
            visited[k]=true;
            Node* indexK=hl[k]->getNext();
            while(indexK!=NULL){
                Node* indexStart=hl[start]->getNext();
                while(indexStart!=NULL){
                    if(indexStart->getVer()==indexK->getVer()&&indexStart->getWeight()>(min+indexK->getWeight())){
                        indexStart->setWeight(min+indexK->getWeight());
                        paths[indexStart->getVer()]=paths[k]+"->"+int_to_string(indexStart->getVer());
                    }
                    indexStart=indexStart->getNext();
                }
                indexK=indexK->getNext();
            }
        }

        for(int i=0;i<n;i++){
//            System.out.println("Path from "+start+" to "+i+": "+paths[i]);
              cout<<"Path from "<<start<<" to "<<i<<": "<<paths[i]<<endl;
        }
    }
};
class AdjListGraph{
public:
    int size;
//    Random rand;
    Node** headList;
    AdjListGraph(int size){
        this->size=size;
//        rand=new Random();
        headList=new Node*[size];
        headList=createGraph(headList,size);
    }
    Node** createGraph(Node** hl,int size) {
        Node** tail=new Node*[size];
        for(int i=0;i<size;i++){
            hl[i]=new Node(i,0,NULL);
            tail[i]=hl[i];
        }
        for(int i=0;i<size;i++){
            for(int j=size-1;j>=i;j--){
                if(i==j){
                    continue;
                }else{
//                    int value=rand.nextInt(9)+1;
                    int value=rand()%9+1;
                    Node* node1=new Node(j,value,NULL);
                    Node* node2=new Node(i,value,NULL);
                    tail[i]->setNext(node1);
                    tail[j]->setNext(node2);
                    tail[i]=node1;
                    tail[j]=node2;
                }
            }
        }    
        return hl;
    }
    void printGraph(){
        for(int i=0;i<size;i++){
            Node* index=headList[i];
            while(index!=NULL){
 //               System.out.print(index.getVer()+","+index.getWeight()+" ");
                cout<<index->getVer()<<','<<index->getWeight()<<' ';
                index=index->getNext();
            }    
//            System.out.println();
            cout<<endl;
        }
    }
};


int main()
{
     AdjListGraph alg(5);
     alg.printGraph();
     cout<<"All-pair shortest paths:"<<endl;
     AgoPro2_Dijkstra_LinkedList::printAllPairPaths(alg.headList,alg.size);
     
//     system("pause");
}

 主要就是几点,java里的引用转化为c++时一般用指针,对象的数组变成了指针的数组,点
(.)运算符变为->运算符(指针的调用),java有很多东西会自动初始化,比如上面的
boolean[] visited=new boolean[n];java会自动初始为false,如果c++里不显示地初始为
false就会出错了。
在c++里,数组就是一组数据,不像java那样有各种属性方法。

c++里main不在类里面

经我测试,改编的是正确的。

零月的记忆
2014-02-26 · 超过28用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:73.4万
展开全部
这样的 问题 一般没有人不会有人帮你的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
书书漫dq
2014-02-26 · TA获得超过3476个赞
知道大有可为答主
回答量:8419
采纳率:88%
帮助的人:1795万
展开全部
有的能改 有的改不了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式