当前位置:编程学习 > JAVA >>

1万定点有向图求环

这个程序只能处理有限个数的顶点,内存不够,有没有高手能够指导一下,如何修改程序,能够处理1万个顶点?
急,,,,,谢谢了高手们!!!!!!


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Hashtable;
public class Test7 {
    
    static private long[] visited = new long[20];
    
    static private long[][] e = new long[20][20];
    
    static ArrayList<Integer> trace=new ArrayList<Integer>();
    static boolean hasCycle=false;
    public static void main(String[] args) throws IOException {
        
     for (int i = 0; i < e.length; i++){
     for (int j = 0; j < e[i].length; j++){
     e[i][j]=0;
     }
     }
    
     BufferedReader in = new BufferedReader(
             new InputStreamReader(new FileInputStream("3.txt")));
         String str = in.readLine();
         StringBuffer buffer = new StringBuffer();
         
         do{
          buffer.append(str);
         
          buffer.append(" ");
        
          String[] s = buffer.toString().split(" ");
          buffer.delete(0, buffer.length());
         
          int a = Integer.parseInt(s[0]);
          int b = Integer.parseInt(s[1]);
         
          e[a][b] = 1;
         
          str = in.readLine();
        
         }while(str!=null);
         
         in.close();

     findCycle(0);
        if(!hasCycle) 
            System.out.println("No Cycle.");
    }
    static void findCycle(int v) 
    {
        if(visited[v]==1)
        {
            int j;
            if((j=trace.indexOf(v))!=-1)
            {
                hasCycle=true;
                System.out.print("Cycle:");
                while(j<trace.size())
                {
                    System.out.print(trace.get(j)+" ");
                    j++;
                }
                System.out.print("\n");
                return;
            }
            return;
        }
        visited[v]=1;
        trace.add(v);
        
        for(int i=0;i<20;i++)
        {
            if(e[v][i]==1)
                findCycle(i);
        }
        trace.remove(trace.size()-1);
    }
}
--------------------编程问答-------------------- LZ是搞ACM的?
--------------------编程问答-------------------- 搞数据分析的 --------------------编程问答-------------------- 没有人会吗?自己顶一个 --------------------编程问答-------------------- 高手呢?都不在?
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,