ROUTING 최적화문제

  • draner
    draner

    ROUTING

    튜토리얼 그래프에 있는 문제입니다...

    다익스트라나 그래프 문제는 전부 인접행렬을 이용해서 풀었는데요...

    이러면 메모리 초과로 안풀립니다..
    10000*10000 ./....

    어떻게 접근하는게 좋을까요??;;;

    #include <iostream>
    
    using namespace std;
    #define INF 99999999;
    
    double arr[10001][10001];
    int visit[10001];
    double dist[10001];
    int computer, node;
    
    void dijkstra()
    {
        int i,j;
        int min;
        int v;
        dist[0] = 1;        
        for ( i =0;i <computer; i++)
        {
            min = INF;
            for ( j =0 ; j <computer; j++)
            {
                if ( visit[j] == 0 && min > dist[j])
                {
                    min = dist[j];
                    v = j;
                }
            }
    
            visit[v] = 1;  
    
    
            for ( j = 0;j < computer; j++)      
            {
                if ( dist[j] > dist[v] * arr[v][j] && arr[v][j]!=0 )       
            {   
                dist[j] = dist[v] * arr[v][j];
                }
            }
    
        }
    }
    
    int main(){
    
        int testcase ;
    
        cin>>testcase;
        int x,y;
        double weight;
        for(int t=0 ;t<testcase;t++){
    
            cin>>computer>>node;
    
            for(int i=0; i<computer; i++){
                visit[i]=0;
            }
    
    
    
            for(int i=0; i<computer;i++){
    
                for(int j=0; j<computer; j++){
                    if(i!=j)
                        arr[i][j]= INF;
    
                }
    
            }
    
    
    
            for(int i=0; i<node;i++){
                cin>>x>>y;
                scanf("%lf", &weight);
                if(arr[x][y]>weight)
                    arr[x][y]= weight;  
            }   
    
    
    
            for ( int i =0;i <computer; i++)
            {
                 dist[i] = INF;
            }
            dijkstra();
            printf("%.10lf\n",dist[computer-1]);
    
        }
    
         return 0;
    }
    

    8년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.