Hallo Ich habe das felogende Code
nun es ist egal was das Code macht , mein Problem ist ,dass es nach dem Einlesen der eingabe nicht hält,und ich brauche es für ein Contest deswegen ist die Laufzeit sehr wichtig,
Ich habe es auch mit System.exit(0) versucht ,was auch nicht geklappt hat.
als Eingabe kann man das folgende Eingeben
3 4 5
G..X
..XS
W...
5 4 4
GG..
....
..W.
..W.
SS..
5 4 10
GG..
XX..
..W.
..W.
SS..
2 7 11
G.XXX.S
G..WW.S
0 0 0
oder das hier
2 4 4
.W.S
.W.G
0 0 0
wer die Aufgabe sich angucken möchte es befindet sich hier problems.pdf download - 2shared
Aufgabe nummer 14
Danke für jedes Tipp
Java:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;
public class RichieRich2 {
public void run(){
Scanner sc=new Scanner(System.in);
int hoehe;
int breite;
int k;
int PAnzahl=1,WAnzahl=1,SAnzahl=1,GAnzahl=1;
hoehe=Integer.parseInt(sc.next());
breite=Integer.parseInt(sc.next());
k=Integer.parseInt(sc.next());
while(k!=0 & hoehe!=0 && breite !=0){
String[][] array=new String[hoehe][breite];
for(int i=0;i<hoehe;i++){
String ein=sc.next();
for(int j=0;j<breite;j++){
if(ein.charAt(j)=='.')
array[i][j]="."+(PAnzahl++);
if(ein.charAt(j)=='W')
array[i][j]="W"+(WAnzahl++);
if(ein.charAt(j)=='S')
array[i][j]="S"+(SAnzahl++);
if(ein.charAt(j)=='G')
array[i][j]="G"+(GAnzahl++);
if(ein.charAt(j)=='X')
array[i][j]="X";
}
}
HashMap<String,ArrayList<String>> graph=graphErstellen(array);
WAnzahl-=1;
SAnzahl-=1;
GAnzahl-=1;
HashMap<String,ArrayList<String>> netzG=new HashMap<String,ArrayList<String>>();
HashMap<String,ArrayList<String>> netzS=new HashMap<String,ArrayList<String>>();
for(int i=1;i<=WAnzahl;i++){
@SuppressWarnings("unchecked")
HashMap<String, Eigenschaften> BFSGraph = BFS((HashMap<String,ArrayList<String>>)graph.clone(),"W"+i);
ArrayList<String> tempArray=new ArrayList<String>();
for(int j=1;j<=SAnzahl;j++){
int l=laengeBestimmen("W"+i,"S"+j,BFSGraph);
if(l>0 && l<=k)
tempArray.add("S"+j);
}
if(tempArray.size()>0)
netzS.put("W"+i, tempArray);
ArrayList<String> tempArray2=new ArrayList<String>();
for(int j=1;j<=GAnzahl;j++){
int l=laengeBestimmen("W"+i,"G"+j,BFSGraph);
if(l>0 && l<=k )
tempArray2.add("G"+j);
}
if(tempArray2.size()>0)
netzG.put("W"+i, tempArray2);
}
ArrayList<String> arrayG=new ArrayList<String>(netzG.keySet());
for(String str:arrayG){
if( netzG.get(str)==null){
netzS.remove(str);
netzG.remove(str);
}
}
ArrayList<String> arrayS=new ArrayList<String>(netzG.keySet());
for(String str:arrayS){
if( netzS.get(str)==null){
netzS.remove(str);
netzG.remove(str);
}
}
int match1=biMatching(netzG);
int match11=biMatching2(netzG);
int match2=biMatching(netzS);
int match22=biMatching2(netzS);
int matchG=Math.max(match1,match11);
int matchS=Math.max(match22,match2);
System.out.println(Math.min(matchS, matchG));
hoehe=Integer.parseInt(sc.next());
breite=Integer.parseInt(sc.next());
k=Integer.parseInt(sc.next());
if(k==0 && hoehe==0 && breite==0){
System.exit(0);
}
}
}
int biMatching(HashMap<String,ArrayList<String>> graph){
@SuppressWarnings("unchecked")
HashMap<String,ArrayList<String>> netz =(HashMap<String,ArrayList<String>>) graph.clone();
int zaehler=0;
ArrayList<String> array=new ArrayList<String>(netz.keySet());
for(String str:array){
ArrayList<String> array2=netz.get(str);
if(array2.size()>0){
netz.remove(str);
netz=farbeAendern(array2.get(0),netz);
++zaehler;
}
}
return zaehler;
}
int biMatching2(HashMap<String,ArrayList<String>> graph){
HashMap<String,ArrayList<String>> netz =(HashMap<String,ArrayList<String>>) graph.clone();
int zaehler=0;
ArrayList<String> array=new ArrayList<String>(netz.keySet());
for(String str:array){
ArrayList<String> array2=netz.get(str);
if(array2.size()>0){
netz.remove(str);
netz=farbeAendern(array2.get(array2.size()-1),netz);
++zaehler;
}
}
return zaehler;
}
HashMap<String,ArrayList<String>> farbeAendern(String wert,HashMap<String,ArrayList<String>> graph){
HashMap<String,ArrayList<String>> netz =(HashMap<String,ArrayList<String>>) graph.clone();
ArrayList<String> array =new ArrayList<String>(netz.keySet());
for(String str:array){
ArrayList<String> array2=netz.get(str);
array2.remove(wert);
netz.put(str, array2);
}
return netz;
}
int laengeBestimmen(String W,String Ziel,HashMap<String, Eigenschaften> graph){
Object ob=graph.get(Ziel);
if(ob==null || graph.get(Ziel).vater==null) return Integer.MIN_VALUE;
String vater= graph.get(Ziel).vater;
if( ! vater.equals(W)
&& vater.charAt(0)=='W') return Integer.MIN_VALUE;
if(vater.equals(W)) return 1;
else {
return 1+laengeBestimmen(W, vater,graph);
}
}
//0=weiss 1=grau 2=schwarz
HashMap<String,Eigenschaften> BFS(HashMap<String,ArrayList<String>> graph,String w){
HashMap<String,Eigenschaften> graphErgebnis=new HashMap<String,Eigenschaften>();
Set<String> set=graph.keySet();
set.remove("X");
Iterator iter=set.iterator();
while(iter.hasNext()){
String str=(String)iter.next();
Eigenschaften tempEig=new Eigenschaften('0',null,Integer.MAX_VALUE,graph.get(str));
graphErgebnis.put(str, tempEig);
}
Eigenschaften tempEig=new Eigenschaften('1',null,0,graph.get(w));
graphErgebnis.remove(w);
graphErgebnis.put(w, tempEig);
LinkedList<String> queue=new LinkedList<String>();
queue.offerFirst(w);
while(queue.size()>0){
String u=queue.pollLast();
ArrayList<String> tempArray=graphErgebnis.get(u).getAdList();
if(tempArray!=null)
for(String v:tempArray){
if(graphErgebnis.get(v).farbe=='0'){
tempEig=graphErgebnis.remove(v);
graphErgebnis.put(v,new Eigenschaften('1',u,graphErgebnis.get(u).getDistanz()+1,tempEig.adList));
queue.offerFirst(v);
}
}
graphErgebnis.get(u).farbe='2';
}
return graphErgebnis;
}
HashMap<String,ArrayList<String>> graphErstellen(String[][] array){
HashMap<String,ArrayList<String>> graph=new HashMap<String,ArrayList<String>>();;
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]!=null && ((array[i][j].charAt(0)=='.') || (array[i][j].charAt(0)=='W'))){
ArrayList<String> tempArray=new ArrayList<String>();
if(j==0 && i==0 && i!=array.length-1 && j!=array[i].length-1 ){
tempArray.add(array[i+1][j]);
tempArray.add(array[i][j+1]);
}else
if(j==0 && i!=0 && i!=array.length-1 && j!=array[i].length-1){
tempArray.add(array[i+1][j]);
tempArray.add(array[i-1][j]);
tempArray.add(array[i][j+1]);
}else
if(j==0 && i!=0 && i==array.length-1 && j!=array[i].length-1){
tempArray.add(array[i][j+1]);
tempArray.add(array[i-1][j]);
}else
if(j==0 && i==0 && i==array.length-1 && j!=array[i].length-1){
tempArray.add(array[i][j+1]);
}else
if(j!=0 && i==0 && i!=array.length-1 && j!=array[i].length-1){
tempArray.add(array[i+1][j]);
tempArray.add(array[i][j-1]);
tempArray.add(array[i][j+1]);
}else
if(j!=0 && i==0 && i!=array.length-1 && j==array[i].length-1){
tempArray.add(array[i+1][j]);
tempArray.add(array[i][j-1]);
}else
if(j!=0 && i==0 && i==array.length-1 && j==array[i].length-1){
tempArray.add(array[i][j-1]);
}else
if(j!=0 && i==0 && i==array.length-1 && j!=array[i].length-1){
tempArray.add(array[i][j-1]);
tempArray.add(array[i][j+1]);
}else
if(j!=0 && i!=0 && i!=array.length-1 && j!=array[i].length-1){
tempArray.add(array[i][j-1]);
tempArray.add(array[i][j+1]);
tempArray.add(array[i+1][j]);
tempArray.add(array[i-1][j]);
}else
if(j!=0 && i!=0 && i!=array.length-1 && j==array[i].length-1){
tempArray.add(array[i+1][j]);
tempArray.add(array[i-1][j]);
tempArray.add(array[i][j-1]);
}else
if(j!=0 && i!=0 && i==array.length-1 && j!=array[i].length-1){
tempArray.add(array[i-1][j]);
tempArray.add(array[i][j-1]);
tempArray.add(array[i][j+1]);
}else
if(j!=0 && i!=0 && i==array.length-1 && j==array[i].length-1){
tempArray.add(array[i-1][j]);
tempArray.add(array[i][j-1]);
}else
if(j==0 && i!=0 && i!=array.length-1 && j==array[i].length-1){
tempArray.add(array[i-1][j]);
tempArray.add(array[i+1][j]);
}else
if(j==0 && i!=0 && i==array.length-1 && j==array[i].length-1){
tempArray.add(array[i-1][j]);
}else
if(j==0 && i==0 && i!=array.length-1 && j==array[i].length-1){
tempArray.add(array[i+1][j]);
}
while(tempArray.contains(new String("X")))
tempArray.remove("X");
if(array[i][j].charAt(0)=='W') removeW(tempArray);
graph.put(array[i][j], tempArray);
}
else{
ArrayList<String> tempArray=new ArrayList<String>();
graph.put(array[i][j], tempArray);
}
}
}
return graph;
}
ArrayList<String> removeW(ArrayList<String> array){
ArrayList<String> tempArray =(ArrayList<String>)array.clone();
for(String str:tempArray){
if(str.charAt(0)=='W') array.remove(str);
}
return tempArray;
}
public static void main(String[] args) {
long zstVorher;
long zstNachher;
zstVorher = System.currentTimeMillis();
new RichieRich2().run();
//zstNachher = System.currentTimeMillis();
//System.out.println("Zeit benötigt: " + (zstNachher - zstVorher));
}
public class Eigenschaften{
char farbe;
public char getFarbe() {
return farbe;
}
public void setFarbe(char farbe) {
this.farbe = farbe;
}
public String getVater() {
return vater;
}
public void setVater(String vater) {
this.vater = vater;
}
public int getDistanz() {
return distanz;
}
public void setDistanz(int distanz) {
this.distanz = distanz;
}
String vater;
int distanz;
ArrayList<String> adList;
public ArrayList<String> getAdList() {
return adList;
}
public void setAdList(ArrayList<String> adList) {
this.adList = adList;
}
public Eigenschaften(char farbe, String vater, int distanz, ArrayList<String> adList) {
this.farbe = farbe;
this.vater = vater;
this.distanz = distanz;
this.adList = adList;
}
}
}
Ich habe es auch mit System.exit(0) versucht ,was auch nicht geklappt hat.
als Eingabe kann man das folgende Eingeben
3 4 5
G..X
..XS
W...
5 4 4
GG..
....
..W.
..W.
SS..
5 4 10
GG..
XX..
..W.
..W.
SS..
2 7 11
G.XXX.S
G..WW.S
0 0 0
oder das hier
2 4 4
.W.S
.W.G
0 0 0
wer die Aufgabe sich angucken möchte es befindet sich hier problems.pdf download - 2shared
Aufgabe nummer 14
Danke für jedes Tipp