主题:有问题 求无向图中的最大连通分量阿
import java.io.BufferedReader;
import java.io.InputStreamReader;
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[];
static GraphEinlesen []graphEinlesen = null;//speicherr jede Object von GraphEinlesen
public static void main(String []agrs)throws Exception
{
int knote;
int kante;
int vonKnoteNummer;
int nachKnoteNummer;
GraphEinlesen ge0=null ;//in ge0 speichert Knoten
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;
}
gesucht = new int[ge0.getKnoten()+1];//speichert gesucht konten
gesucht[0]=1;
for(int n=1;n<ge0.getKnoten()+1;n++)
{
gesucht[n] = 0;
}
for(int m=1;m<ge0.getKnoten()+1;m++)
{
System.out.println(gesucht[3]);
if(gesucht[m]==0)
{
Anzahl++;
suchen(m);
}
}
System.out.println("Anzahl der maxmale Komponenten ist"+Anzahl);
}
public static void suchen(int anfangKnote)
{
behalten = new int[graphEinlesen.length];
int t = 0;
for(int j=0;j<graphEinlesen.length;j++)
{
behalten[j] = 0;
}
gesucht[anfangKnote]=1;
for(int i=0;i<graphEinlesen.length;i++)
{
GraphEinlesen gEinlesen = graphEinlesen[i];
if(gEinlesen.getVonKnotenNummer() == anfangKnote)
{
gesucht[gEinlesen.getNachKnotenNummer()] = 1;
behalten[t++] = gEinlesen.getNachKnotenNummer();
}
}
for(int b=0;b<graphEinlesen.length;b++)
{
if(behalten[b]!=0)
suchen(b);
}
}
}
访问过的点好像不能保存
import java.io.InputStreamReader;
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[];
static GraphEinlesen []graphEinlesen = null;//speicherr jede Object von GraphEinlesen
public static void main(String []agrs)throws Exception
{
int knote;
int kante;
int vonKnoteNummer;
int nachKnoteNummer;
GraphEinlesen ge0=null ;//in ge0 speichert Knoten
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;
}
gesucht = new int[ge0.getKnoten()+1];//speichert gesucht konten
gesucht[0]=1;
for(int n=1;n<ge0.getKnoten()+1;n++)
{
gesucht[n] = 0;
}
for(int m=1;m<ge0.getKnoten()+1;m++)
{
System.out.println(gesucht[3]);
if(gesucht[m]==0)
{
Anzahl++;
suchen(m);
}
}
System.out.println("Anzahl der maxmale Komponenten ist"+Anzahl);
}
public static void suchen(int anfangKnote)
{
behalten = new int[graphEinlesen.length];
int t = 0;
for(int j=0;j<graphEinlesen.length;j++)
{
behalten[j] = 0;
}
gesucht[anfangKnote]=1;
for(int i=0;i<graphEinlesen.length;i++)
{
GraphEinlesen gEinlesen = graphEinlesen[i];
if(gEinlesen.getVonKnotenNummer() == anfangKnote)
{
gesucht[gEinlesen.getNachKnotenNummer()] = 1;
behalten[t++] = gEinlesen.getNachKnotenNummer();
}
}
for(int b=0;b<graphEinlesen.length;b++)
{
if(behalten[b]!=0)
suchen(b);
}
}
}
访问过的点好像不能保存