回 帖 发 新 帖 刷新版面

主题:还是有问题,求无向图中的最大连通分量阿

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Vector;

class GraphEinlesen 
    { 
        private int knoten;
        private int kanten;
        private int vonKnotenNummer;
        private int nachKnotenNummer;
        
        public GraphEinlesen(int knoten)
        {
            this.knoten = knoten;
            
        }
        
        public GraphEinlesen(int vonKnotenNummer,int nachKnotenNummer )
        {
            this.vonKnotenNummer = vonKnotenNummer;
            this.nachKnotenNummer = nachKnotenNummer;
        }
        
        public int getKnoten()
        {
            return knoten;
        }
        public void setKnoten(int knoten)
        {
            this.knoten = knoten;
        }
        

        public int getKanten()
        {
            return kanten;
        }
        public void setKanten(int kanten)
        {
            this.kanten = kanten;
        }
        
        public int getVonKnotenNummer( )
        {
            return vonKnotenNummer;
        }
        public void setVonKnotenNummer( int vonKnotenNummer)
        {
            this.vonKnotenNummer = vonKnotenNummer;
        }
        
        public int getNachKnotenNummer( )
        {
            return nachKnotenNummer;
        }
        public void setNachKnotenNummer (int nachKnotenNummer)
        {
            this.nachKnotenNummer = nachKnotenNummer;
        }
        
    }


public class Komponenten 
    {  
       //static int behalten[] ;
       //static int Anzahl = 0;   //Anzahl der maxmale Komponenten
       static int gesucht[],i,m;
       static GraphEinlesen []graphEinlesen = null;//speicherr jede Object von GraphEinlesen
       static GraphEinlesen ge0=null ;//in ge0 speichert Knoten 
       static LinkedList l = new LinkedList();
       static LinkedList<Vector> l2 = new LinkedList<Vector>();//speichert maxmale Komponenten
       public static void main(String []agrs)throws Exception
      {
          int knote;
          int kante;
          int vonKnoteNummer;
          int nachKnoteNummer;
           
          GraphEinlesen ge=null ; //eine Object von GraphEinlesen
          
          
           
          BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
         
              System.out.println("bitten knoten und kante einlesen");
              
              System.out.print("knoten =");
              knote = Integer.parseInt(buf.readLine());
              
              System.out.print("kanten =");
              kante = Integer.parseInt(buf.readLine());
              
              ge0 = new GraphEinlesen(knote);
              ge0.setKanten(kante);
              graphEinlesen = new GraphEinlesen[ge0.getKanten()];
              for(int a=0;a<ge0.getKanten();a++)
              {
                  System.out.print("vonKnotenNummer =");
                  vonKnoteNummer = Integer.parseInt(buf.readLine());
                  
                  System.out.print("nachKnotenNummer =");
                  nachKnoteNummer = Integer.parseInt(buf.readLine());
                  
                  ge = new GraphEinlesen(vonKnoteNummer, nachKnoteNummer);
                  graphEinlesen[a] = ge;
              }
              
              dfs();
              
     }
        static void dfs()
       {
           
           l = null;
           int Anzahl=0;
           gesucht = new int[ge0.getKnoten()+1];
           for(int i=0;i<ge0.getKnoten()+1;i++);
           {
               gesucht[i] = 0;
           }
           
           
           for(int m=1;m<ge0.getKnoten()+1;m++);
           {
               Vector t = new Vector();
               if(gesucht[m]==0)
               {
                   //System.out.println(gesucht[]);
                   Anzahl++;
                   suchen(m);
                   while(l!=null)
                   {
                       
                       GraphEinlesen g = (GraphEinlesen)l.getFirst();
                       if(gesucht[g.getNachKnotenNummer()]==0)
                       {
                          t.add(g);
                          l.removeFirst();
                          suchen(g.getNachKnotenNummer());
                          
                       }
                        l2.add(t);
                   }
               }
           }
           
           ListIterator li = l2.listIterator();
           while(li.hasNext())
           {
               Vector v1 = (Vector)li.next();
           
               for(Object obj:v1)
               {
                   GraphEinlesen gein = (GraphEinlesen)obj;
                   System.out.println(gein.getVonKnotenNummer()+" "+gein.getNachKnotenNummer()+"   ");
               }
               
           }
           System.out.println("die Anzahle der maxmale Komponenten ist"+Anzahl);
       }
        
        
        
        static void suchen(int v)
       {
           gesucht[v] = 1;
           
           for(int n=0;n<ge0.getKanten();n++)
           {
               GraphEinlesen ge = graphEinlesen[n];
               if(ge.getVonKnotenNummer() == v)
               {
                   l.addFirst(ge);
               }
                 
           }
               
       }
       
       
       
       
    }

回复列表 (共1个回复)

沙发

Spammer!

我来回复

您尚未登录,请登录后再回复。点此登录或注册