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;
}
}