마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

dijkstra 알고리즘을 적용한 최단경로 탐색

0 추천
dijkstra 알고리즘을 적용한 최단경로 탐색 안드로이드 어플을 만들려고 합니다.

 

mainActiviy에서 출발점과 도착점을 text로 작성하여

 

버튼을 누르면 dijkstra 알고리즘을 따라 결과값을 Dialog나 textview를 통해 나타내고 싶습니다.

 

java로 되어있는 dijkstra 알고리즘 소스를 구해서 android형태로 약간 수정을 거쳐 class를

 

추가하였는데 결과값이 class내에서 system.out. 의 형태로 되어있습니다.

 

1. 이 결과값을 activity에 보내어 적용을 하려면 어떻게 해야할지 감이 잡히질 않습니다.

 

2. 또한 mainActivity에서 입력받은 값을 어떻게 알고리즘 class로 입력해야 할지도 모르겠습니다.

 

데이터는 텍스트 파일로 작성해였습니다.

정말 초보자입니다. 쉬운설명 해주시면 정말 감사하겠습니다.

 

 

알고리즘 class 소스 첨부합니다!

////////////////////////////////////////////////////////////////////////////////////

package dijkstra;

import java.io.File;
import java.util.StringTokenizer;

import android.os.Environment;

public class algorithm_class {

    public final int MAX=57;
    final static int ab=57;
    final static int M=9999;
    int[][] Original=new int[MAX][MAX];
    int[] map=new int[MAX];
    int how_many=0;
    public void trans_val_sta(int val) {
            Properties inha=new Properties();
            String line;
            DeviceReader fs = new DeviceReader("/sdcard/database/node number.txt");
            line=fs.loadFileString();
            if (line == null)
            {
                System.out.println("have not database file.");
            }
            else
            {
                StringTokenizer recordToken = new StringTokenizer(line, "\r\n");
                while(recordToken.hasMoreTokens()){
                    String recordStream = recordToken.nextToken();
                    StringTokenizer fieldToken = new StringTokenizer(recordStream," ");
                    inha.name = fieldToken.nextToken();
                    inha.number = Integer.parseInt(fieldToken.nextToken());
                  
                    if(val==inha.number)
                    {
                        how_many++;
                        System.out.println(inha.name);
                        break;
                    }
            }
        }
    }

    public int trans_sta_val(String sta)
    {
        Properties inha=new Properties();
        String line;
        DeviceReader fs = new DeviceReader("/sdcard/database/node number.txt");
        line=fs.loadFileString();
        if (line == null)
        {
            System.out.println("have not database file.");
            return -1;
        }
        else {
            StringTokenizer recordToken = new StringTokenizer(line, "\r\n");
            while(recordToken.hasMoreTokens()){
                String recordStream = recordToken.nextToken();
                StringTokenizer fieldToken = new StringTokenizer(recordStream," ");
                inha.name = fieldToken.nextToken();
                inha.number = Integer.parseInt(fieldToken.nextToken());
                if (sta.equals(inha.name)) {
                    break;
                }
                else {
                    inha.number--;
                }
            }
            return inha.number;
        }

    }
    public void Dijakstra(int starting, int ending)
    {
        int i, j, position=0, count, check=0;
        int Min;
        int[] stack=new int[MAX];
        int[] load=new int[MAX];
        int[] FastWay=new int[MAX];;
        int Fastcount;
        int l, time=200000000;

        Fastcount=0;
        Min=M;
        count=0;
        stack[count]=map[starting];

        for(i=0 ; i<MAX ; i++)
        {
            map[i]=Original[starting][i];
        }

        while(count != MAX)
        {

            count++;
            for(i=0 ; i<MAX ; i++)
            {
                for(j=0 ; j<MAX ; j++)
                {
                    if(stack[j] == i)
                    {
                        check=0;
                        break;
                    }
                    check=1;
                }
                if(check==1)
                {
                    if(map[i] < Min)
                    {
                        Min=map[i];
                        position=i;
                    }
                }
            }

            for(i=0 ; i<MAX ; i++)
            {
                if(Original[position][i] + map[position] < map[i])
                {
                    map[i] = Original[position][i] + map[position];
                    load[i]=position;
                }
            }
            Min=M;
            if (count > 56)
                break;
            stack[count]=position;
        }

        for(i=0 ; i<MAX ; i++)
        {
            if(load[i] < 0)
            {
                load[i]=starting;
            }
        }

        i=ending;
        while(true)
        {
            FastWay[Fastcount]=i;
            Fastcount++;
            if(i == starting)
                break;
            i=load[i];
        }
       
        System.out.println("\n\n optimal route \n");
     for(i=Fastcount-1 ; i>0 ; i--)
     {
         trans_val_sta(FastWay[i]);
         for(l=0; l<time; l++);
         System.out.println("\n->");
         for(l=0; l<time; l++);
     }
     trans_val_sta(FastWay[0]);
     System.out.print("\n\n% distance :  ");
     System.out.print(map[ending]);
     System.out.println("M\n");
     
     System.out.print("\n\n% result time : 0.01*");
     System.out.println(map[ending]);
     System.out.print(" node : ");
     System.out.print(how_many);
     System.out.println(" aaa\n");
 
    }
  
 
    public void load_matrix()
    {
  
        String Word;
        int element;
        int i=0,j=0;
        DeviceReader fs = new DeviceReader("/sdcard/database/array.txt");
        Word=fs.loadFileString();
        if(Word==null)
            System.out.println(" have not database file.");
        else
        {
            StringTokenizer recordToken = new StringTokenizer(Word, "\r\n");
            while(recordToken.hasMoreTokens())
            {
                String recordStream = recordToken.nextToken();
                StringTokenizer fieldToken = new StringTokenizer(recordStream,"\t");
                while(fieldToken.hasMoreTokens())
                {
                    if (j >= 57) {
                        i++;
                        j = 0;
                        if (j >= 57 && i >= 57)
break;
                    }
                    Original[i][j] = Integer.parseInt(fieldToken.nextToken());
                    j++;
                }
            }
        }
    }
    public void setHow_many(int number)
    {
        how_many=number;
    }
}
익명사용자 님이 2015년 11월 16일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...