主题:还是有问题,求无向图中的最大连通分量阿
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);
}
}
}
}
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);
}
}
}
}