AuK/Durchläufe durch Graphen SS12

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
=Java-Test=


<code id="4f986cf808f9a">
public Object Stack () //queue folgt!
{
   int size = 10;
   int[] st = new int[size];
   int top = -1;

   public void push(int j)
      {st[++top] = j;}

   public int pop()
      {return st[top--];}

   public int peek()
      {return st[top];}

   public boolean isEmpty()
      {return (top == -1);}
   
   return this;

}
//works!
</code>

<code id="4f8d8fe214252">
//y u no accepting classes? D:

public Object Vertex (char label)
{
   char label = label;
   boolean wasVisited = false;

   return this;
}

public Object Graph()
{
   int max_verts = 7;
   Object[] vertexList = new Object[max_verts];
   int nVerts = 0;
   int[][] adjMat = new int[max_verts+1][max_verts+1];

   Object stacky = Stack();

   /*for(int col=0; col<max_verts+1; col++)
      adjMat[col][0] = col;

   for(int row=0; row<max_verts+1; row++)
      adjMat[0][row] = row;*/ 

   for(int i =0; i<max_verts; i++)
      for(int j=0; j<max_verts; j++)
         adjMat[i][j] = 0;
   
   void addEdge(int start, int end)
   {
      adjMat[start][end] = 1;
     //adjMat[end][start] = 1; //nur für ungerichtete Graphen!! 
   }

   void addVertex(char lab)
   {
      vertexList[nVerts++] = Vertex(lab);
   }

   void displayVertex(int v)
   {
      System.out.print(vertexList[v].label);
   }

   void dfs()
   {
      vertexList[0].wasVisited=true;
      displayVertex(0);
      stacky.push(0);

      while (!stacky.isEmpty())
      {
         int v = getAdjUnvisitedVertex(stacky.peek());
         if(v == -1) stacky.pop();
         else 
         {
            vertexList[v].wasVisited = true;
            displayVertex(v);
            stacky.push(v);
         }
      }

      for(int j=0; j<nVerts; j++)
         vertexList[j].wasVisited = false;
   }

   int getAdjUnvisitedVertex(int v)
   {
      for(int j=0; j<nVerts; j++)
        if(adjMat[v][j] == 1 && vertexList[j].wasVisited==false)
           return j;
      return -1;
   }
   
   return this;
}

</code>
<run id="4f8d9ec24fd44">
/*Stack01 = Stack();
Stack01.push(1);
Stack01.push(2);
Stack01.push(4);
Stack01.push(5);
Stack01.push(3);

VertexA = Vertex('A');
System.out.println(VertexA.wasVisited + "\n" +
VertexA.label);
System.out.println(Stack01.top);*/

//G1 von S.145
theGraph = Graph();
      theGraph.addVertex('1');    // 0  (start for dfs)
      theGraph.addVertex('2');    // 1
      theGraph.addVertex('3');    // 2
      theGraph.addVertex('4');    // 3
      theGraph.addVertex('5');    // 4

      theGraph.addEdge(0, 1);     // 1-2
      theGraph.addEdge(1, 0); 	  // 2-1
      theGraph.addEdge(1, 3);     // 2-4
      theGraph.addEdge(0, 3); 	  // 1-4
      theGraph.addEdge(3, 4);	  // 4-5
      theGraph.addEdge(4, 2);     // 5-3
      theGraph.addEdge(2, 5); 	  // 3-5
      theGraph.addEdge(2, 2);	  // 3-3

theGraph.dfs();

System.out.println(" ");

for (int k = 0; k < theGraph.max_verts+1 ; ++k) {
     for (int l = 0; l < theGraph.max_verts+1 ; ++l) {
        System.out.print(theGraph.adjMat[k][l] + "\t");}
System.out.println("");}</run>