해밀턴 사이클이란 무엇입니까?
해밀턴 사이클 또는 서킷 그래프에서 G 의 모든 꼭지점을 방문하는 순환입니다. G 정확히 한 번만 실행하고 시작 정점으로 돌아갑니다.
- 그래프에 해밀턴 사이클이 포함되어 있으면 이를 호출합니다. 해밀턴 그래프 그렇지 않으면 그것은 비해밀턴식 .
- 그래프에서 해밀턴 사이클을 찾는 것은 잘 알려진 방법입니다. NP-완전 문제 이는 모든 유형의 그래프에 대해 이를 해결할 수 있는 효율적인 알고리즘이 알려져 있지 않다는 것을 의미합니다. 그러나 작거나 특정 유형의 그래프에 대해서는 해결할 수 있습니다.
해밀턴 사이클 문제는 다음과 같은 다양한 분야에 실용적으로 적용됩니다. 물류, 네트워크 설계, 컴퓨터 과학 .
해밀턴 경로란 무엇입니까?
해밀턴 경로 그래프에서 G G의 모든 꼭지점을 정확히 한 번씩 방문하는 경로입니다. 해밀턴 경로 시작 정점으로 돌아갈 필요는 없습니다. 열린 길입니다.
- 유사하다 해밀턴 사이클 문제, 찾기 해밀턴 경로 일반적인 그래프에서도 NP-완전 그리고 어려울 수 있습니다. 그러나 해밀턴 사이클을 찾는 것보다 더 쉬운 문제인 경우가 많습니다.
- 해밀턴 경로는 다음과 같은 다양한 분야에 적용됩니다. 교통망, 회로 설계, 그래프 이론 연구에서 최적의 경로 찾기 .
문제 설명: 방향이 지정되지 않은 그래프가 주어지면 그래프에 해밀턴 사이클이 포함되어 있는지 여부를 확인하는 것이 과제입니다. 포함된 경우 경로를 인쇄합니다.
예:
권장 사항: 해결해 보세요. 관행 먼저, 솔루션으로 넘어가기 전에.입력: 그래프[][] = {{0, 1, 0, 1, 0},{1, 0, 1, 1, 1},{0, 1, 0, 0, 1},{1, 1, 0, 0, 1},{0, 1, 1, 1, 0}}
입력 그래프[][]
자바스크립트 여러줄 문자열산출: {0, 1, 2, 4, 3, 0}.
입력: 그래프[][] = {{0, 1, 0, 1, 0},{1, 0, 1, 1, 1},{0, 1, 0, 0, 1},{1, 1, 0, 0, 0},{0, 1, 1, 0, 0}}
입력 그래프[][]
산출: 솔루션이 존재하지 않습니다.
순진한 알고리즘 : 이 문제는 아래 아이디어를 사용하여 해결할 수 있습니다.
정점의 가능한 모든 구성을 생성하고 주어진 제약 조건을 충족하는 구성을 인쇄합니다. n이 있을 것이다! (n 계승) 구성. 따라서 이 접근 방식의 전체 시간 복잡도는 다음과 같습니다. 에!).
해밀턴 사이클을 이용한 역추적 알고리즘 :
빈 경로 배열을 만들고 정점을 추가합니다. 0 그것에. 정점부터 시작하여 다른 정점을 추가합니다. 1 . 꼭지점을 추가하기 전에 이전에 추가한 꼭지점과 인접해 있는지, 아직 추가되지 않았는지 확인하세요. 그러한 꼭지점을 찾으면 해당 꼭지점을 솔루션의 일부로 추가합니다. 정점을 찾지 못하면 반환합니다. 거짓 .
일러스트레이션:
다음 그래프에서 해밀턴 사이클을 알아봅시다.
- 노드 0부터 시작합니다.
- 해밀턴 경로를 찾기 위해 DFS를 적용합니다.
- 기본 사례에 도달하면(예: 통과한 총 노드 수 == V(총 정점) ):
- 현재 노드가 시작 노드의 이웃인지 확인합니다.
- 노드로 2 및 노드 0 서로 이웃이 아니므로 그 곳에서 돌아오세요.
DFS를 호출하는 시작 노드 0에서 시작
- {0, 3, 1, 4, 2} 경로에서 사이클을 찾을 수 없습니다. 따라서 노드 2, 노드 4에서 돌아옵니다.
- 이제 노드 1(즉, 노드 2)에 대한 다른 옵션을 살펴보세요.
- 다시 기본 조건에 도달하면 해밀턴 사이클을 확인하세요.
- 노드 4는 노드 0의 이웃이 아니므로 다시 사이클을 찾지 못하고 반환됩니다.
- 노드 4, 노드 2, 노드 1에서 돌아옵니다.
- 이제 노드 3에 대한 다른 옵션을 살펴보세요.
해밀턴 사이클
- 해밀턴 경로에서 {0,3,4,2,1,0} 노드 1이 노드 0의 이웃이므로 사이클을 얻습니다.
- 따라서 이 순환 경로를 인쇄하십시오.
- 이것이 해밀턴 사이클입니다.
다음은 해밀턴 사이클을 찾기 위한 역추적 구현입니다.
C++ /* C++ program for solution of Hamiltonian Cycle problem using backtracking */ #include using namespace std; // Number of vertices in the graph #define V 5 void printSolution(int path[]); /* A utility function to check if the vertex v can be added at index 'pos' in the Hamiltonian Cycle constructed so far (stored in 'path[]') */ bool isSafe(int v, bool graph[V][V], int path[], int pos) { /* Check if this vertex is an adjacent vertex of the previously added vertex. */ if (graph [path[pos - 1]][ v ] == 0) return false; /* Check if the vertex has already been included. This step can be optimized by creating an array of size V */ for (int i = 0; i < pos; i++) if (path[i] == v) return false; return true; } /* A recursive utility function to solve hamiltonian cycle problem */ bool hamCycleUtil(bool graph[V][V], int path[], int pos) { /* base case: If all vertices are included in Hamiltonian Cycle */ if (pos == V) { // And if there is an edge from the // last included vertex to the first vertex if (graph[path[pos - 1]][path[0]] == 1) return true; else return false; } // Try different vertices as a next candidate // in Hamiltonian Cycle. We don't try for 0 as // we included 0 as starting point in hamCycle() for (int v = 1; v < V; v++) { /* Check if this vertex can be added // to Hamiltonian Cycle */ if (isSafe(v, graph, path, pos)) { path[pos] = v; /* recur to construct rest of the path */ if (hamCycleUtil (graph, path, pos + 1) == true) return true; /* If adding vertex v doesn't lead to a solution, then remove it */ path[pos] = -1; } } /* If no vertex can be added to Hamiltonian Cycle constructed so far, then return false */ return false; } /* This function solves the Hamiltonian Cycle problem using Backtracking. It mainly uses hamCycleUtil() to solve the problem. It returns false if there is no Hamiltonian Cycle possible, otherwise return true and prints the path. Please note that there may be more than one solutions, this function prints one of the feasible solutions. */ bool hamCycle(bool graph[V][V]) { int *path = new int[V]; for (int i = 0; i < V; i++) path[i] = -1; /* Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected */ path[0] = 0; if (hamCycleUtil(graph, path, 1) == false ) { cout << '
Solution does not exist'; return false; } printSolution(path); return true; } /* A utility function to print solution */ void printSolution(int path[]) { cout << 'Solution Exists:' ' Following is one Hamiltonian Cycle
'; for (int i = 0; i < V; i++) cout << path[i] << ' '; // Let us print the first vertex again // to show the complete cycle cout << path[0] << ' '; cout << endl; } // Driver Code int main() { /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) */ bool graph1[V][V] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 1}, {0, 1, 1, 1, 0}}; // Print the solution hamCycle(graph1); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) */ bool graph2[V][V] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 0}, {0, 1, 1, 0, 0}}; // Print the solution hamCycle(graph2); return 0; } // This is code is contributed by rathbhupendra> C++ #include using namespace std; int main() { cout << 'GFG!'; return 0; }> 씨 /* C program for solution of Hamiltonian Cycle problem using backtracking */ #include // Number of vertices in the graph #define V 5 void printSolution(int path[]); /* A utility function to check if the vertex v can be added at index 'pos' in the Hamiltonian Cycle constructed so far (stored in 'path[]') */ int isSafe(int v, int graph[V][V], int path[], int pos) { /* Check if this vertex is an adjacent vertex of the previously added vertex. */ if (graph [ path[pos-1] ][ v ] == 0) return 0; /* Check if the vertex has already been included. This step can be optimized by creating an array of size V */ for (int i = 0; i < pos; i++) if (path[i] == v) return 0; return 1; } /* A recursive utility function to solve hamiltonian cycle problem */ int hamCycleUtil(int graph[V][V], int path[], int pos) { /* base case: If all vertices are included in Hamiltonian Cycle */ if (pos == V) { // And if there is an edge from the last included vertex to the // first vertex if ( graph[ path[pos-1] ][ path[0] ] == 1 ) return 1; else return 0; } // Try different vertices as a next candidate in Hamiltonian Cycle. // We don't try for 0 as we included 0 as starting point in hamCycle() for (int v = 1; v < V; v++) { /* Check if this vertex can be added to Hamiltonian Cycle */ if (isSafe(v, graph, path, pos)) { path[pos] = v; /* recur to construct rest of the path */ if (hamCycleUtil (graph, path, pos+1) == 1) return 1; /* If adding vertex v doesn't lead to a solution, then remove it */ path[pos] = -1; } } /* If no vertex can be added to Hamiltonian Cycle constructed so far, then return false */ return 0; } /* This function solves the Hamiltonian Cycle problem using Backtracking. It mainly uses hamCycleUtil() to solve the problem. It returns false if there is no Hamiltonian Cycle possible, otherwise return true and prints the path. Please note that there may be more than one solutions, this function prints one of the feasible solutions. */ int hamCycle(int graph[V][V]) { int path[V]; for (int i = 0; i < V; i++) path[i] = -1; /* Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected */ path[0] = 0; if ( hamCycleUtil(graph, path, 1) == 0 ) { printf('
Solution does not exist'); return 0; } printSolution(path); return 1; } /* A utility function to print solution */ void printSolution(int path[]) { printf ('Solution Exists:' ' Following is one Hamiltonian Cycle
'); for (int i = 0; i < V; i++) printf(' %d ', path[i]); // Let us print the first vertex again to show the complete cycle printf(' %d ', path[0]); printf('
'); } // driver program to test above function int main() { /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) */ int graph1[V][V] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 1}, {0, 1, 1, 1, 0}, }; // Print the solution hamCycle(graph1); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) */ int graph2[V][V] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 0}, {0, 1, 1, 0, 0}, }; // Print the solution hamCycle(graph2); return 0; }> 자바 /* Java program for solution of Hamiltonian Cycle problem using backtracking */ class HamiltonianCycle { final int V = 5; int path[]; /* A utility function to check if the vertex v can be added at index 'pos'in the Hamiltonian Cycle constructed so far (stored in 'path[]') */ boolean isSafe(int v, int graph[][], int path[], int pos) { /* Check if this vertex is an adjacent vertex of the previously added vertex. */ if (graph[path[pos - 1]][v] == 0) return false; /* Check if the vertex has already been included. This step can be optimized by creating an array of size V */ for (int i = 0; i < pos; i++) if (path[i] == v) return false; return true; } /* A recursive utility function to solve hamiltonian cycle problem */ boolean hamCycleUtil(int graph[][], int path[], int pos) { /* base case: If all vertices are included in Hamiltonian Cycle */ if (pos == V) { // And if there is an edge from the last included // vertex to the first vertex if (graph[path[pos - 1]][path[0]] == 1) return true; else return false; } // Try different vertices as a next candidate in // Hamiltonian Cycle. We don't try for 0 as we // included 0 as starting point in hamCycle() for (int v = 1; v < V; v++) { /* Check if this vertex can be added to Hamiltonian Cycle */ if (isSafe(v, graph, path, pos)) { path[pos] = v; /* recur to construct rest of the path */ if (hamCycleUtil(graph, path, pos + 1) == true) return true; /* If adding vertex v doesn't lead to a solution, then remove it */ path[pos] = -1; } } /* If no vertex can be added to Hamiltonian Cycle constructed so far, then return false */ return false; } /* This function solves the Hamiltonian Cycle problem using Backtracking. It mainly uses hamCycleUtil() to solve the problem. It returns false if there is no Hamiltonian Cycle possible, otherwise return true and prints the path. Please note that there may be more than one solutions, this function prints one of the feasible solutions. */ int hamCycle(int graph[][]) { path = new int[V]; for (int i = 0; i < V; i++) path[i] = -1; /* Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected */ path[0] = 0; if (hamCycleUtil(graph, path, 1) == false) { System.out.println('
Solution does not exist'); return 0; } printSolution(path); return 1; } /* A utility function to print solution */ void printSolution(int path[]) { System.out.println('Solution Exists: Following' + ' is one Hamiltonian Cycle'); for (int i = 0; i < V; i++) System.out.print(' ' + path[i] + ' '); // Let us print the first vertex again to show the // complete cycle System.out.println(' ' + path[0] + ' '); } // driver program to test above function public static void main(String args[]) { HamiltonianCycle hamiltonian = new HamiltonianCycle(); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) */ int graph1[][] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 1}, {0, 1, 1, 1, 0}, }; // Print the solution hamiltonian.hamCycle(graph1); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) */ int graph2[][] = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 0}, {0, 1, 1, 0, 0}, }; // Print the solution hamiltonian.hamCycle(graph2); } } // This code is contributed by Abhishek Shankhadhar> 파이썬 # Python program for solution of # hamiltonian cycle problem class Graph(): def __init__(self, vertices): self.graph = [[0 for column in range(vertices)] for row in range(vertices)] self.V = vertices ''' Check if this vertex is an adjacent vertex of the previously added vertex and is not included in the path earlier ''' def isSafe(self, v, pos, path): # Check if current vertex and last vertex # in path are adjacent if self.graph[ path[pos-1] ][v] == 0: return False # Check if current vertex not already in path for vertex in path: if vertex == v: return False return True # A recursive utility function to solve # hamiltonian cycle problem def hamCycleUtil(self, path, pos): # base case: if all vertices are # included in the path if pos == self.V: # Last vertex must be adjacent to the # first vertex in path to make a cycle if self.graph[ path[pos-1] ][ path[0] ] == 1: return True else: return False # Try different vertices as a next candidate # in Hamiltonian Cycle. We don't try for 0 as # we included 0 as starting point in hamCycle() for v in range(1,self.V): if self.isSafe(v, pos, path) == True: path[pos] = v if self.hamCycleUtil(path, pos+1) == True: return True # Remove current vertex if it doesn't # lead to a solution path[pos] = -1 return False def hamCycle(self): path = [-1] * self.V ''' Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected ''' path[0] = 0 if self.hamCycleUtil(path,1) == False: print ('Solution does not exist
') return False self.printSolution(path) return True def printSolution(self, path): print ('Solution Exists: Following', 'is one Hamiltonian Cycle') for vertex in path: print (vertex ) # Driver Code ''' Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) ''' g1 = Graph(5) g1.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1], [0, 1, 0, 0, 1,],[1, 1, 0, 0, 1], [0, 1, 1, 1, 0], ] # Print the solution g1.hamCycle(); ''' Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) ''' g2 = Graph(5) g2.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1], [0, 1, 0, 0, 1,], [1, 1, 0, 0, 0], [0, 1, 1, 0, 0], ] # Print the solution g2.hamCycle(); # This code is contributed by Divyanshu Mehta> 씨# // C# program for solution of Hamiltonian // Cycle problem using backtracking using System; public class HamiltonianCycle { readonly int V = 5; int []path; /* A utility function to check if the vertex v can be added at index 'pos'in the Hamiltonian Cycle constructed so far (stored in 'path[]') */ bool isSafe(int v, int [,]graph, int []path, int pos) { /* Check if this vertex is an adjacent vertex of the previously added vertex. */ if (graph[path[pos - 1], v] == 0) return false; /* Check if the vertex has already been included. This step can be optimized by creating an array of size V */ for (int i = 0; i < pos; i++) if (path[i] == v) return false; return true; } /* A recursive utility function to solve hamiltonian cycle problem */ bool hamCycleUtil(int [,]graph, int []path, int pos) { /* base case: If all vertices are included in Hamiltonian Cycle */ if (pos == V) { // And if there is an edge from the last included // vertex to the first vertex if (graph[path[pos - 1],path[0]] == 1) return true; else return false; } // Try different vertices as a next candidate in // Hamiltonian Cycle. We don't try for 0 as we // included 0 as starting point in hamCycle() for (int v = 1; v < V; v++) { /* Check if this vertex can be added to Hamiltonian Cycle */ if (isSafe(v, graph, path, pos)) { path[pos] = v; /* recur to construct rest of the path */ if (hamCycleUtil(graph, path, pos + 1) == true) return true; /* If adding vertex v doesn't lead to a solution, then remove it */ path[pos] = -1; } } /* If no vertex can be added to Hamiltonian Cycle constructed so far, then return false */ return false; } /* This function solves the Hamiltonian Cycle problem using Backtracking. It mainly uses hamCycleUtil() to solve the problem. It returns false if there is no Hamiltonian Cycle possible, otherwise return true and prints the path. Please note that there may be more than one solutions, this function prints one of the feasible solutions. */ int hamCycle(int [,]graph) { path = new int[V]; for (int i = 0; i < V; i++) path[i] = -1; /* Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected */ path[0] = 0; if (hamCycleUtil(graph, path, 1) == false) { Console.WriteLine('
Solution does not exist'); return 0; } printSolution(path); return 1; } /* A utility function to print solution */ void printSolution(int []path) { Console.WriteLine('Solution Exists: Following' + ' is one Hamiltonian Cycle'); for (int i = 0; i < V; i++) Console.Write(' ' + path[i] + ' '); // Let us print the first vertex again // to show the complete cycle Console.WriteLine(' ' + path[0] + ' '); } // Driver code public static void Main(String []args) { HamiltonianCycle hamiltonian = new HamiltonianCycle(); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) */ int [,]graph1= {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 1}, {0, 1, 1, 1, 0}, }; // Print the solution hamiltonian.hamCycle(graph1); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) */ int [,]graph2 = {{0, 1, 0, 1, 0}, {1, 0, 1, 1, 1}, {0, 1, 0, 0, 1}, {1, 1, 0, 0, 0}, {0, 1, 1, 0, 0}, }; // Print the solution hamiltonian.hamCycle(graph2); } } // This code contributed by Rajput-Ji> 자바스크립트 >
PHP // PHP program for solution of // Hamiltonian Cycle problem // using backtracking $V = 5; /* A utility function to check if the vertex v can be added at index 'pos' in the Hamiltonian Cycle constructed so far (stored in 'path[]') */ function isSafe($v, $graph, &$path, $pos) { /* Check if this vertex is an adjacent vertex of the previously added vertex. */ if ($graph[$path[$pos - 1]][$v] == 0) return false; /* Check if the vertex has already been included. This step can be optimized by creating an array of size V */ for ($i = 0; $i < $pos; $i++) if ($path[$i] == $v) return false; return true; } /* A recursive utility function to solve hamiltonian cycle problem */ function hamCycleUtil($graph, &$path, $pos) { global $V; /* base case: If all vertices are included in Hamiltonian Cycle */ if ($pos == $V) { // And if there is an edge from the // last included vertex to the first vertex if ($graph[$path[$pos - 1]][$path[0]] == 1) return true; else return false; } // Try different vertices as a next candidate in // Hamiltonian Cycle. We don't try for 0 as we // included 0 as starting point hamCycle() for ($v = 1; $v < $V; $v++) { /* Check if this vertex can be added to Hamiltonian Cycle */ if (isSafe($v, $graph, $path, $pos)) { $path[$pos] = $v; /* recur to construct rest of the path */ if (hamCycleUtil($graph, $path, $pos + 1) == true) return true; /* If adding vertex v doesn't lead to a solution, then remove it */ $path[$pos] = -1; } } /* If no vertex can be added to Hamiltonian Cycle constructed so far, then return false */ return false; } /* This function solves the Hamiltonian Cycle problem using Backtracking. It mainly uses hamCycleUtil() to solve the problem. It returns false if there is no Hamiltonian Cycle possible, otherwise return true and prints the path. Please note that there may be more than one solutions, this function prints one of the feasible solutions. */ function hamCycle($graph) { global $V; $path = array_fill(0, $V, 0); for ($i = 0; $i < $V; $i++) $path[$i] = -1; /* Let us put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point of the cycle as the graph is undirected */ $path[0] = 0; if (hamCycleUtil($graph, $path, 1) == false) { echo('
Solution does not exist'); return 0; } printSolution($path); return 1; } /* A utility function to print solution */ function printSolution($path) { global $V; echo('Solution Exists: Following is '. 'one Hamiltonian Cycle
'); for ($i = 0; $i < $V; $i++) echo(' '.$path[$i].' '); // Let us print the first vertex again to show the // complete cycle echo(' '.$path[0].'
'); } // Driver Code /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3)-------(4) */ $graph1 = array(array(0, 1, 0, 1, 0), array(1, 0, 1, 1, 1), array(0, 1, 0, 0, 1), array(1, 1, 0, 0, 1), array(0, 1, 1, 1, 0), ); // Print the solution hamCycle($graph1); /* Let us create the following graph (0)--(1)--(2) | / | | / | | / | (3) (4) */ $graph2 = array(array(0, 1, 0, 1, 0), array(1, 0, 1, 1, 1), array(0, 1, 0, 0, 1), array(1, 1, 0, 0, 0), array(0, 1, 1, 0, 0)); // Print the solution hamCycle($graph2); // This code is contributed by mits ?>> 산출
Solution Exists: Following is one Hamiltonian Cycle 0 1 2 4 3 0 Solution does not exist>
시간 복잡도 : O(N!), 여기서 N은 정점 수입니다.
보조공간 : O(1), 추가 공간을 사용하지 않기 때문입니다.
메모: 위의 코드는 항상 다음부터 시작하는 사이클을 인쇄합니다. 0 . 사이클은 어느 지점에서나 시작될 수 있으므로 시작점은 중요하지 않습니다. 시작점을 변경하려면 위 코드에서 두 가지를 변경해야 합니다.
경로 변경[0] = 0; 에게 경로[0] = s ; 어디 에스 네 새거야? 출발점 . 또한 (int v = 1; v에 대한 루프를 변경하십시오.




