More actions
imported>Unknown No edit summary |
(Repair batch-0006 pages from live compare) |
||
| Line 41: | Line 41: | ||
== 삽질하기.. == | == 삽질하기.. == | ||
[[8queen/손동일]] | [[8queen/손동일]] 스택큐/손동일 [[RandomWalk/손동일]] [[오목/재선,동일]] | ||
| Line 59: | Line 59: | ||
}; | }; | ||
int Vertex | int Vertex[Max][Max] = | ||
{ | { | ||
{0,3,100,100,5,100,100,4,100,100,100}, | {0,3,100,100,5,100,100,4,100,100,100}, | ||
| Line 74: | Line 74: | ||
}; | }; | ||
vertex ver1 | vertex ver1[11] = {(0,0,0),(0,0,0),(0,0,0), | ||
(0,0,0),(0,0,0),(0,0,0), | (0,0,0),(0,0,0),(0,0,0), | ||
(0,0,0),(0,0,0),(0,0,0), | (0,0,0),(0,0,0),(0,0,0), | ||
| Line 80: | Line 80: | ||
int temp; | int temp; | ||
int temp1 | int temp1[10] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; | ||
int soo = 0; | int soo = 0; | ||
| Line 90: | Line 90: | ||
int n = Max; | int n = Max; | ||
int between | int between[Max]; | ||
int check | int check[Max]; | ||
void shortpath(int Vertex | void shortpath(int Vertex[Max][Max],int between[Max], int n, int check[Max]); | ||
void using_v(int n); | void using_v(int n); | ||
int choose(int between | int choose(int between[Max],int n,int check[Max]); | ||
int main() | int main() | ||
| Line 112: | Line 112: | ||
cout << endl; | cout << endl; | ||
int between | int between[Max]; | ||
shortpath(Vertex,between,n,check); | shortpath(Vertex,between,n,check); | ||
cout << "최단거리 : " << between | cout << "최단거리 : " << between[last] << "\n"; | ||
cout << "최단경로 : " ; | cout << "최단경로 : " ; | ||
| Line 123: | Line 123: | ||
for(int j = soo ; j >= 0 ; j--) | for(int j = soo ; j >= 0 ; j--) | ||
{ | { | ||
if(ver1 | if(ver1[j].length == between[last] && ver1[j].goal == last) | ||
{ | { | ||
temp1 | temp1[0] = ver1[j].going; | ||
temp = ver1 | temp = ver1[j].going; | ||
} | } | ||
} | } | ||
| Line 139: | Line 139: | ||
for(int m=9 ; m>=0 ; m--) | for(int m=9 ; m>=0 ; m--) | ||
if(temp1 | if(temp1[m] != -1) | ||
{ | { | ||
if(temp1 | if(temp1[m]==10) | ||
{ | { | ||
cout.put(temp1 | cout.put(temp1[m]+80); | ||
cout << " ---> "; | cout << " ---> "; | ||
} | } | ||
else | else | ||
{ | { | ||
cout.put(temp1 | cout.put(temp1[m]+65); | ||
cout << " ---> "; | cout << " ---> "; | ||
} | } | ||
| Line 174: | Line 174: | ||
for(int k = soo ; k >= 0 ; k--) | for(int k = soo ; k >= 0 ; k--) | ||
{ | { | ||
if(ver1 | if(ver1[k].goal == a) | ||
{ | { | ||
temp1 | temp1[soo2] = ver1[k].going; | ||
temp = ver1 | temp = ver1[k].going; | ||
soo2++; | soo2++; | ||
} | } | ||
| Line 188: | Line 188: | ||
void shortpath(int Vertex | void shortpath(int Vertex[Max][Max],int between[Max], int n, int check[Max]) | ||
{ | { | ||
int i,j,k; | int i,j,k; | ||
| Line 194: | Line 194: | ||
for(i=0 ; i<n ; i++) | for(i=0 ; i<n ; i++) | ||
{ | { | ||
check | check[i] = false; | ||
between | between[i] = Vertex[first][i]; | ||
} | } | ||
check | check[first]=true; | ||
for(i=0 ; i<n-2 ; i++) | for(i=0 ; i<n-2 ; i++) | ||
| Line 206: | Line 206: | ||
break; | break; | ||
check | check[j] = true; | ||
for(k=0 ; k<n ; k++) | for(k=0 ; k<n ; k++) | ||
{ | { | ||
if(!check | if(!check[k]) | ||
if(between | if(between[j]+Vertex[j][k] < between[k]) | ||
{ | { | ||
ver1 | ver1[soo].going = j; | ||
ver1 | ver1[soo].goal = k; | ||
ver1 | ver1[soo].length = between[j] + Vertex[j][k]; | ||
soo++; | soo++; | ||
between | between[k] = between[j] + Vertex[j][k]; | ||
} | } | ||
} | } | ||
| Line 226: | Line 226: | ||
int choose(int between | int choose(int between[Max],int n,int check[Max]) | ||
{ | { | ||
int minimum,min_price; | int minimum,min_price; | ||
| Line 233: | Line 233: | ||
for(int i=0 ; i<n ; i++) | for(int i=0 ; i<n ; i++) | ||
{ | { | ||
if(between | if(between[i]< minimum && !check[i]) | ||
{ | { | ||
minimum = between | minimum = between[i]; | ||
min_price = i; | min_price = i; | ||
} | } | ||
| Line 259: | Line 259: | ||
{ | { | ||
int name; | int name; | ||
int neighbor | int neighbor[MAX][2]; | ||
int len_from_start; | int len_from_start; | ||
bool except; | bool except; | ||
| Line 266: | Line 266: | ||
void main() | void main() | ||
{ | { | ||
sVertice vertices | sVertice vertices[MAX] = | ||
{ | { | ||
{a, {{b,3}, {e,5}, {h,4}} }, | {a, {{b,3}, {e,5}, {h,4}} }, | ||
| Line 288: | Line 288: | ||
for (int i = 0 ; i < MAX ; i++) | for (int i = 0 ; i < MAX ; i++) | ||
{ | { | ||
if ( vertices | if ( vertices[i].name == (int)start ) | ||
{ | { | ||
choice = &vertices | choice = &vertices[i]; | ||
vertices | vertices[i].len_from_start = 0; | ||
} | } | ||
else | else | ||
{ | { | ||
if ( vertices | if ( vertices[i].name == (int)end ) | ||
goal = &vertices | goal = &vertices[i]; | ||
vertices | vertices[i].len_from_start = INT_MAX; | ||
} | } | ||
} | } | ||
| Line 307: | Line 307: | ||
for (int j = 0 ; j < MAX ; j++) | for (int j = 0 ; j < MAX ; j++) | ||
{ | { | ||
if (vertices | if (vertices[i].except) | ||
break; | break; | ||
else if (&vertices | else if (&vertices[i] == choice) | ||
break; | break; | ||
else if (vertices | else if (vertices[i].neighbor[j][0] == choice->name) | ||
{ | { | ||
if (vertices | if (vertices[i].len_from_start == INT_MAX) | ||
{ | { | ||
vertices | vertices[i].len_from_start = 0; | ||
vertices | vertices[i].len_from_start | ||
+= vertices | += vertices[i].neighbor[j][1] | ||
+ choice->len_from_start; | + choice->len_from_start; | ||
} | } | ||
else if (vertices | else if (vertices[i].len_from_start | ||
- vertices | - vertices[i].neighbor[j][1] | ||
- choice->len_from_start > 0) | - choice->len_from_start > 0) | ||
vertices | vertices[i].len_from_start | ||
= vertices | = vertices[i].neighbor[j][1] | ||
+ choice->len_from_start; | + choice->len_from_start; | ||
break; | break; | ||
| Line 335: | Line 335: | ||
choice = goal; | choice = goal; | ||
for (i = 0 ; i < MAX ; i++) | for (i = 0 ; i < MAX ; i++) | ||
if (vertices | if (vertices[i].len_from_start < INT_MAX | ||
&& !vertices | && !vertices[i].except | ||
&& (choice->len_from_start == 0 | && (choice->len_from_start == 0 | ||
|| vertices | || vertices[i].len_from_start < choice->len_from_start)) | ||
choice = &vertices | choice = &vertices[i]; | ||
} | } | ||
cout << "최단거리는 " << goal->len_from_start << "입니다." <<endl; | cout << "최단거리는 " << goal->len_from_start << "입니다." <<endl; | ||
char path | char path[MAX]; | ||
int z = 0; | int z = 0; | ||
while (choice->len_from_start != 0) | while (choice->len_from_start != 0) | ||
| Line 350: | Line 350: | ||
for ( i = 0; i < MAX ; i++) | for ( i = 0; i < MAX ; i++) | ||
{ | { | ||
if (vertices | if (vertices[i].except) | ||
{ | { | ||
for ( int j = 0 ; j < MAX ; j++) | for ( int j = 0 ; j < MAX ; j++) | ||
if (vertices | if (vertices[i].name == choice->neighbor[j][0] | ||
&& vertices | && vertices[i].len_from_start | ||
== choice->len_from_start - choice->neighbor | == choice->len_from_start - choice->neighbor[j][1]) | ||
{ | { | ||
path | path[z++] = char(choice->name); | ||
choice = &vertices | choice = &vertices[i]; | ||
break; | break; | ||
} | } | ||
| Line 364: | Line 364: | ||
} | } | ||
} | } | ||
path | path[z] = char(choice->name); | ||
cout << "경로는 "; | cout << "경로는 "; | ||
for (i = z ; i >= 0 ; i--) | for (i = z ; i >= 0 ; i--) | ||
cout << path | cout << path[i] << " "; | ||
cout << endl; | cout << endl; | ||
} | } | ||
Latest revision as of 01:08, 27 March 2026
ZeroPage 03
Profile
컴퓨터 공학과 03학번 손동일입니다 ZP ghost member.. 현재 휴학중입니다.. 자주 이용 할테니.. 페이지 사용할 수 있게 해주세요~^^
폰번호 011-763-5032 엠에센 ajagaja82 at hotmail dot com
목표
언어마스터되기
계획
언어공부하기
진행중
TOEIC , C++, 잠자기.. EMBEDED ( 하나도 모르겠다.. )
Coding....
데블스 캠프를 통해 배운것
python, scheme, squeet, java, 리눅스, OOP
하고싶은 것
실컷 잠자기, LINUX, VB
좋은 프로그램
구구단/손동일 피보나치/손동일 파스칼삼각형/손동일 숫자야구/손동일 만년달력/손동일,aekae
삽질하기..
8queen/손동일 스택큐/손동일 RandomWalk/손동일 오목/재선,동일
홈페이지분류, ZeroWikian DuplicatedPage
#include <iostream>
using namespace std;
const int Max = 11 ;
struct vertex{
int going;
int goal;
int length;
};
int Vertex[Max][Max] =
{
{0,3,100,100,5,100,100,4,100,100,100},
{3,0,2,100,5,7,100,100,100,100,100},
{100,2,0,3,100,2,6,100,100,100,100},
{100,100,3,0,100,100,7,100,100,100,2},
{5,5,100,100,0,4,100,7,100,100,100},
{100,7,2,100,4,0,4,5,4,3,100},
{100,100,2,7,100,4,0,100,100,4,6},
{4,100,100,100,7,5,100,0,2,100,100},
{100,100,100,100,100,4,100,2,0,6,100},
{100,100,100,100,100,3,4,100,6,0,5},
{100,100,100,2,100,100,6,100,100,5,0}
};
vertex ver1[11] = {(0,0,0),(0,0,0),(0,0,0),
(0,0,0),(0,0,0),(0,0,0),
(0,0,0),(0,0,0),(0,0,0),
(0,0,0),(0,0,0)};
int temp;
int temp1[10] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int soo = 0;
int soo2 = 1;
int first = 0;
int last = 0;
int n = Max;
int between[Max];
int check[Max];
void shortpath(int Vertex[Max][Max],int between[Max], int n, int check[Max]);
void using_v(int n);
int choose(int between[Max],int n,int check[Max]);
int main()
{
cout << "최단 경로를 구해보자~ !!!";
cout << endl;
cout << "A=0 , B=1 , C=2 , D=3 , E=4 , F=5"
<< ", G=6 , H=7 , I=8 , J=9 , Z=10 입니다.. "
<< endl;
cout << "숫자로 입력하세요";
cout << endl;
cout << "첫값을 입력해 주세요.. : " ;
cin >> first;
cout << "도착 할 값을 입력해주세요.. : " ;
cin >> last;
cout << endl;
int between[Max];
shortpath(Vertex,between,n,check);
cout << "최단거리 : " << between[last] << "\n";
cout << "최단경로 : " ;
cout.put(first+65);
cout << " ---> ";
for(int j = soo ; j >= 0 ; j--)
{
if(ver1[j].length == between[last] && ver1[j].goal == last)
{
temp1[0] = ver1[j].going;
temp = ver1[j].going;
}
}
for(int l = soo ; l >= 0 ; l--)
{
if(temp == -1)
break;
using_v(temp);
}
for(int m=9 ; m>=0 ; m--)
if(temp1[m] != -1)
{
if(temp1[m]==10)
{
cout.put(temp1[m]+80);
cout << " ---> ";
}
else
{
cout.put(temp1[m]+65);
cout << " ---> ";
}
}
if(last==10)
{
cout.put(last+80);
cout << endl;
}
else
{
cout.put(last+65);
cout << endl;
}
return 0;
}
void using_v(int n)
{
int a = n;
for(int k = soo ; k >= 0 ; k--)
{
if(ver1[k].goal == a)
{
temp1[soo2] = ver1[k].going;
temp = ver1[k].going;
soo2++;
}
if(temp == 1 || temp == 4 || temp == 7 )
temp = -1;
}
}
void shortpath(int Vertex[Max][Max],int between[Max], int n, int check[Max])
{
int i,j,k;
for(i=0 ; i<n ; i++)
{
check[i] = false;
between[i] = Vertex[first][i];
}
check[first]=true;
for(i=0 ; i<n-2 ; i++)
{
j = choose(between,n,check);
if(j == last)
break;
check[j] = true;
for(k=0 ; k<n ; k++)
{
if(!check[k])
if(between[j]+Vertex[j][k] < between[k])
{
ver1[soo].going = j;
ver1[soo].goal = k;
ver1[soo].length = between[j] + Vertex[j][k];
soo++;
between[k] = between[j] + Vertex[j][k];
}
}
}
}
int choose(int between[Max],int n,int check[Max])
{
int minimum,min_price;
minimum = Max;
min_price=-1;
for(int i=0 ; i<n ; i++)
{
if(between[i]< minimum && !check[i])
{
minimum = between[i];
min_price = i;
}
}
return min_price;
}
#include <iostream.h>
#include <climits>
const int MAX = 11;
enum {a='a', b='b', c='c', d='d', e='e',
f='f', g='g', h='h', i='i', j='j', z='z'};
struct sVertice
{
int name;
int neighbor[MAX][2];
int len_from_start;
bool except;
};
void main()
{
sVertice vertices[MAX] =
{
{a, {{b,3}, {e,5}, {h,4}} },
{b, {{a,3}, {e,5}, {f,7}, {c,2}} },
{c, {{b,2}, {f,2}, {g,6}, {d,3}} },
{d, {{c,3}, {g,7}, {z,2}} },
{e, {{a,5}, {b,5}, {f,4}, {h,7}} },
{f, {{b,7}, {e,4}, {h,5}, {i,4}, {j,3}, {g,3}, {c,2}} },
{g, {{f,4}, {j,4}, {z,6}, {d,7}, {c,6}} },
{h, {{a,4}, {e,7}, {f,5}, {i,2}} },
{i, {{h,2}, {j,6}, {f,4}} },
{j, {{i,6}, {f,3}, {g,4}, {z,5}} },
{z, {{d,2}, {g,6}, {j,5}} },
};
cout << "시작점과 끝점을 입력해주세요(a,b,c,d,e,f,g,h,i,j,z) : " << endl;
char start, end;
cin >> start >> end;
sVertice * choice;
sVertice * goal;
for (int i = 0 ; i < MAX ; i++)
{
if ( vertices[i].name == (int)start )
{
choice = &vertices[i];
vertices[i].len_from_start = 0;
}
else
{
if ( vertices[i].name == (int)end )
goal = &vertices[i];
vertices[i].len_from_start = INT_MAX;
}
}
while ( choice != goal )
{
for (i = 0 ; i < MAX ; i++)
{
for (int j = 0 ; j < MAX ; j++)
{
if (vertices[i].except)
break;
else if (&vertices[i] == choice)
break;
else if (vertices[i].neighbor[j][0] == choice->name)
{
if (vertices[i].len_from_start == INT_MAX)
{
vertices[i].len_from_start = 0;
vertices[i].len_from_start
+= vertices[i].neighbor[j][1]
+ choice->len_from_start;
}
else if (vertices[i].len_from_start
- vertices[i].neighbor[j][1]
- choice->len_from_start > 0)
vertices[i].len_from_start
= vertices[i].neighbor[j][1]
+ choice->len_from_start;
break;
}
}
}
choice->except = true;
choice = goal;
for (i = 0 ; i < MAX ; i++)
if (vertices[i].len_from_start < INT_MAX
&& !vertices[i].except
&& (choice->len_from_start == 0
|| vertices[i].len_from_start < choice->len_from_start))
choice = &vertices[i];
}
cout << "최단거리는 " << goal->len_from_start << "입니다." <<endl;
char path[MAX];
int z = 0;
while (choice->len_from_start != 0)
{
for ( i = 0; i < MAX ; i++)
{
if (vertices[i].except)
{
for ( int j = 0 ; j < MAX ; j++)
if (vertices[i].name == choice->neighbor[j][0]
&& vertices[i].len_from_start
== choice->len_from_start - choice->neighbor[j][1])
{
path[z++] = char(choice->name);
choice = &vertices[i];
break;
}
}
}
}
path[z] = char(choice->name);
cout << "경로는 ";
for (i = z ; i >= 0 ; i--)
cout << path[i] << " ";
cout << endl;
}