方法来连接节点

huangapple 未分类评论46阅读模式
英文:

methodes for linking nodes

问题

以下是您提供的内容的翻译:

我是一个Java初学者,我应该为我的课程做一个练习,涉及创建一个表示图中节点的泛型类。我实现的方法traverse或connect(或两者)都不能正常工作。该图应该是一个无向图,这意味着两个点之间的每个连接都是双向的。

这是我用于Node类的代码:

import java.util.LinkedList;

public class Node <T>{
    private T value;
    private String name;
    private LinkedList<Node <T>> adjacent;
    
    public Node(String name, T value){
        this.value = value;
        this.name = name;
        this.adjacent = new LinkedList<Node <T>>();
    }
    
    public String getName(){
        return name;
    }
    
    public T getValue(){
        return value;
    }
   
    public void setValue(T newValue){
        this.value = newValue;
    } 
    
    public void connect(Node<T> connectableNode){
        this.adjacent.add(connectableNode);
        connectableNode.adjacent.add(this);
    }
    
    public void disconnect(Node<T> removableNode){
        if (this.adjacent.contains(removableNode)){
            this.adjacent.remove(removableNode);
            removableNode.adjacent.remove(this);
        }
    }
    
    public LinkedList<Node<T>> traverse(){
        LinkedList<Node<T>> graph = new LinkedList<Node<T>>();
        LinkedList<Node<T>> queue = new LinkedList<Node<T>>();
        Node<T> current;
        Node<T> next;
        int i;
        
        graph.add(this);
        queue.add(this);
        while (!queue.isEmpty()){
            current = queue.removeFirst();
            for (i = 0; i < current.adjacent.size(); i++){
                next = current.adjacent.removeFirst();
                if (!graph.contains(next)){
                    graph.add(next);
                    queue.add(next);
                }
            }
        }
        return graph;
    }
}

我应该创建一个包含7个节点(命名为A到G)的图,但我只得到4个连接的节点作为输出:

(A,3)
(G,9)
(B,8)
(F,17)

此外,节点应该使用广度优先搜索算法进行遍历,所以我有的这4个节点不在正确的顺序中。

这是用于测试Node类的代码:

import java.util.*;

class TestNodeClass{   
    public static void main(String[] args){
        LinkedList<Node<Integer>> course;
        Iterator<Node<Integer>> iter;
        Node<Integer> a = new Node<Integer>("A", 3);
        Node<Integer> b = new Node<Integer>("B", 8);
        Node<Integer> c = new Node<Integer>("C", 5);
        Node<Integer> d = new Node<Integer>("D", 1);
        Node<Integer> e = new Node<Integer>("E", 8);
        Node<Integer> f = new Node<Integer>("F", 17);
        Node<Integer> g = new Node<Integer>("G", 9);
        a.connect(g);
        a.connect(f);
        b.connect(f);
        b.connect(g);
        f.connect(g);
        c.connect(f);
        c.connect(d);
        d.connect(e);
        course = a.traverse();
        iter = course.iterator();
        while (iter.hasNext()){
            Node<Integer> current = iter.next(); 
            String name = current.getName();
            Integer value = current.getValue();
            System.out.println("(" + name + "," + value + ")");
        }
    }
}

如果有人能给我一些提示或指出问题所在,将会很棒,谢谢!

英文:

Im a java beginner and I'm supposed to do an exercise for my class that involves creating a generic class that represents the Nodes of a graph. Either the method traverse or connect(or both) I implemented don't work properly. The graph is supposed to be an undirected graph, that means every connection between 2 points goes both ways.

Here is my code for the class Node:

import java.util.LinkedList;

public class Node &lt;T&gt;{
    private T value;
    private String name;
    private LinkedList&lt;Node &lt;T&gt;&gt; adjacent;
    
    public Node(String name, T value){
        this.value=value;
        this.name=name;
        this.adjacent= new LinkedList&lt;Node &lt;T&gt;&gt;();
    }
    
    public String getName(){
        return name;
    }
    
    public T getValue(){
        return value;
    }
   
    public void setValue(T newValue){
        this.value=newValue;
    } 
    
    public void connect(Node&lt;T&gt; connectableNode){
        this.adjacent.add(connectableNode);
        connectableNode.adjacent.add(this);
        //add() h&#228;ngt das Argument ans Ende einer Liste
    }
    
    public void disconnect(Node&lt;T&gt; removableNode){
        if (this.adjacent.contains(removableNode)){
            this.adjacent.remove(removableNode);
            removableNode.adjacent.remove(this);
        }
    }
    
    public LinkedList&lt;Node &lt;T&gt;&gt; traverse(){
        //Variablen definieren f&#252;r BFS
        LinkedList&lt;Node &lt;T&gt;&gt; graph = new LinkedList&lt;Node &lt;T&gt;&gt;();
        LinkedList&lt;Node&lt;T&gt;&gt; queue = new LinkedList&lt;Node &lt;T&gt;&gt;();
        Node &lt;T&gt; current;
        Node &lt;T&gt; next;
        int i;
        
        //Startknoten ist erstes Element
        graph.add(this);
        queue.add(this);
        while (queue.isEmpty()!=true){
            current = queue.removeFirst();
            //lasse for schleife durch alle Elemente der Adjazenzliste von current laufen
            for (i=0; i&lt;current.adjacent.size(); i++ ){
                next=current.adjacent.removeFirst();
                if (graph.contains(next)!=true){
                    graph.add(next);
                    queue.add(next);
                }
            }
        }
        return graph;
        }

I'm supposed to create a graph that contains 7 nodes(named A to G) but I only get 4 connected Nodes as an Output:

(A,3)
(G,9)
(B,8)
(F,17)

Also the Nodes should be traversed using the breadth-first search algorithm so the 4 Nodes I have are not in the right order.

import java.util.*;

class TestNodeClass{   
    public static void main(String[] args){
//Definitionen
        LinkedList&lt;Node &lt;Integer&gt;&gt; course;
        Iterator&lt;Node&lt;Integer&gt;&gt; iter;
        Node &lt;Integer&gt; a = new Node &lt;Integer&gt;(&quot;A&quot;, 3);
        Node &lt;Integer&gt; b = new Node &lt;Integer&gt;(&quot;B&quot;, 8);
        Node &lt;Integer&gt; c = new Node &lt;Integer&gt;(&quot;C&quot;, 5);
        Node &lt;Integer&gt; d = new Node &lt;Integer&gt;(&quot;D&quot;, 1);
        Node &lt;Integer&gt; e = new Node &lt;Integer&gt;(&quot;E&quot;, 8);
        Node &lt;Integer&gt; f = new Node &lt;Integer&gt;(&quot;F&quot;, 17);
        Node &lt;Integer&gt; g = new Node &lt;Integer&gt;(&quot;G&quot;, 9);
        a.connect(g);
        a.connect(f);
        b.connect(f);
        b.connect(g);
        f.connect(g);
        c.connect(f);
        c.connect(d);
        d.connect(e);
        course = a.traverse();
        iter = course.iterator();
        while (iter.hasNext()){
            Node &lt;Integer&gt; current = iter.next(); 
            String name = current.getName();
            Integer value = current.getValue();
            System.out.println(&quot;(&quot; + name +&quot;,&quot;+ value + &quot;)&quot;);
        }
    }
}

Would be great if someone could give me a hint or point out what's wrong, thanks!

huangapple
  • 本文由 发表于 2020年7月26日 06:19:28
  • 转载请务必保留本文链接:https://java.coder-hub.com/63094123.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定