Java는 재귀 알고리즘을 통해 미로, 하노이 탑 및 여덟 여왕 문제를 어떻게 해결합니까?
1. 재귀의 중요한 규칙
메서드를 실행하면 새로운 보호되는 독립 공간(스택 공간)이 생성됩니다.
메서드의 지역 변수는 독립적이며 서로 영향을 미치지 않습니다.
메서드에 응용프로그램 유형 변수(예: 배열, 객체)가 사용되는 경우 참조 유형의 데이터가 공유됩니다.
재귀는 반드시 재귀를 종료하기 위한 조건에 접근해야 합니다. 그렇지 않으면 무한 재귀가 됩니다.
메서드가 실행을 완료하거나 반환을 만나면 결과가 호출자에게 반환됩니다. 동시에 메서드가 실행을 완료하거나 반환하면 메서드도 실행을 완료합니다.
2. 세 가지 재귀 사례
1. 미로에서 나온 마우스
//一个7列8行的迷宫 //分析 //1.我们用一个二维数组来表示迷宫 //2.定义一个findWay方法来找路径,返回值为布尔类型, //3.若找到路则返回true,否则返回false。 //4.我们用1来表示障碍物 //5.我们初始化老鼠当前坐标(1,1) //6.用0表示能走,1表示不能走,2表示走过能走,3表示走过但走不通 //7.当map[6][5]=2时则说明找到了出迷宫的路,否则继续找路 //8.我们定义一个试探走的规则,我们假设 下->右->上->左 public class MiGong{ public static void main(String [] args){ //迷宫初始化 int [][] map = new int [8][7]; for(int i = 0; i < 7; i++){ map[0][i] = 1; map[7][i] = 1; } for(int j = 0 ; j < 8; j++){ map[j][0] = 1; map[j][6] = 1; } map[3][1]= 1; map[3][2]= 1; for (int k = 0; k < map.length; k++) { for(int m = 0; m < map[k].length; m++){ System.out.print(map[k][m] + " "); } System.out.println(); } t way = new t(); way.findWay(map, 1, 1); System.out.println("=====找到路径后的地图====="); for (int k = 0 ;k < map.length; k++) { for(int m = 0;m < map[k].length; m++){ System.out.print(map[k][m] + " "); } System.out.println(); } } } class t{ public boolean findWay(int [][] map ,int x , int y){ if(map[6][5]==2){//递归出口若终点处的值为2则表明能找到一条路 return true; }else{ if(map[x][y]==0){//首先若当前位置为0,则表明可以走 map[x][y]=2;//我们假设选这条路可以走通,将当前位置赋为2 //然后按照我们的试探规则依次试探下->右->上->左 if(findWay(map, x+1, y))//递归调用findway函数如果下可以走则返回true return true; else if (findWay(map, x, y+1))//否则还继续看右边能不能走 return true; else if(findWay(map, x-1, y))//上 return true; else if(findWay(map, x, y-1))//左 return true; else { map[x][y]=3; return false; } }else // map[x][y]=1,2,3 return false; } } }
2. 하노이의 탑
전설에 따르면 하노이 게임이라는 탑이 있었습니다. 이 게임은 세 개의 막대(A, B, C 번호)가 있는 구리판 장치에서 진행됩니다. 막대 A에는 n개의 금 디스크가 아래에서 위로, 큰 것에서 작은 순서로 배치됩니다. 게임의 목표는 A극에 있는 금 원반을 모두 C극으로 옮겨 원래 순서대로 쌓아 두는 것입니다. 작동 규칙: 한 번에 하나의 판만 이동할 수 있으며 이동 중에 큰 판은 항상 바닥에 있고 작은 판은 세 개의 막대 위에 있습니다. 작동 중에 판은 어느 곳에나 배치될 수 있습니다. 막대 A, B, C 중 하나입니다.
분석: 이러한 문제의 경우 판이 움직이는 모든 단계를 누구든지 직접 기록하는 것은 불가능하지만 다음과 같은 방법을 사용하여 해결할 수 있습니다. 이동하는 판의 수가 n개라고 가정합니다. 이 n개의 판을 A극에서 C극으로 이동하려면 다음 세 단계를 수행할 수 있습니다.
(1) 판 C를 매개로 판 1을 n-1로 이동합니다. A극에서 B극으로
(2) A극의 나머지 n번째 판을 C극으로 이동합니다.
(3) A극을 매개로 1~n-1판을 B극으로 이동합니다. 극 C 막대.
import java.util.Scanner; public class HanoiTower{ public static void main(String []args ){ System.out.println("请输入你要移动的盘数:"); tower m = new tower(); Scanner input = new Scanner(System.in); int num = input.nextInt(); m.moveWay(num,'A','B','C'); } } class tower{ //num表示要移动的盘的个数,a,b,c分别表示a塔,b塔,c塔 public void moveWay(int num,char a,char b,char c){ if(num == 1){//如果只有一个盘,直接将其从a移动到c System.out.println(a + "->" + c); } else {//如果有多个盘将最后一个盘以上的盘看成一个整体,借助c,移动到b,然后将最后一个盘移到c moveWay(num-1, a, c, b); System.out.println(a + "->" + c); //然后再将b的所有盘,借助a,移动到c moveWay(num-1, b, a, c); } } }
3. Eight Queens
문제는 다음과 같이 표현됩니다. 8x8 정사각형 체스에 8개의 퀸을 배치하여 서로 공격할 수 없도록 합니다. 즉, 두 퀸이 같은 행, 같은 열에 있을 수 없습니다. 또는 같은 경사면을 온라인에서 몇 가지 방법으로 넣을 수 있는지 물어보십시오.
위 내용은 Java는 재귀 알고리즘을 통해 미로, 하노이 탑 및 여덟 여왕 문제를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.

MySQL 기능은 데이터 처리 및 계산에 사용될 수 있습니다. 1. 기본 사용에는 문자열 처리, 날짜 계산 및 수학 연산이 포함됩니다. 2. 고급 사용에는 복잡한 작업을 구현하기 위해 여러 기능을 결합하는 것이 포함됩니다. 3. 성능 최적화를 위해서는 WHERE 절에서 기능 사용 및 GroupBy 및 임시 테이블 사용을 피해야합니다.

Java에서 플랫폼 별 코드를 작성하는 이유에는 특정 운영 체제 기능에 대한 액세스, 특정 하드웨어와 상호 작용하고 성능 최적화가 포함됩니다. 1) JNA 또는 JNI를 사용하여 Windows 레지스트리에 액세스하십시오. 2) JNI를 통한 Linux 특이 적 하드웨어 드라이버와 상호 작용; 3) 금속을 사용하여 JNI를 통해 MacOS의 게임 성능을 최적화하십시오. 그럼에도 불구하고 플랫폼 별 코드를 작성하면 코드의 이식성에 영향을 미치고 복잡성을 높이며 잠재적으로 성능 오버 헤드 및 보안 위험을 초래할 수 있습니다.

Typetraits는 컴파일 타임 유형 확인 및 작동에 C에서 사용되어 코드 유연성 및 유형 안전성을 향상시킵니다. 1) 유형 판단은 STD :: IS_INTEGRAL 및 STD :: IS_FLOATING_POINT를 통해 수행되므로 효율적인 유형 확인 및 출력을 달성합니다. 2) std :: is_trivicial_copyable을 사용하여 벡터 복사를 최적화하고 유형에 따라 다른 사본 전략을 선택하십시오. 3) 컴파일 타임 의사 결정, 유형 안전, 성능 최적화 및 코드 복잡성에주의하십시오. 타이피트 라이트를 합리적으로 사용하면 코드 품질을 크게 향상시킬 수 있습니다.

MySQL에서 문자 세트 및 콜라주를 구성하는 방법은 다음과 같습니다. 1. 서버 수준에서 문자 세트 및 콜라주 설정 : setNames'Utf8 '; setcharactersetutf8; setCollation_connection = 'utf8_general_ci'; 2. 특정 문자 세트 및 콜라주를 사용하는 데이터베이스를 만듭니다. createAbaseexample_DBCHARACTERSETUTF8COLLATEUTF8_GENERAL_CI; 3. 테이블을 만들 때 문자 세트 및 콜라주를 지정하십시오 : CreateTableAmplipt_table (idint

MySQL에서 데이터베이스를 바꾸려면 간접적 인 방법이 필요합니다. 단계는 다음과 같습니다. 1. 새 데이터베이스를 만듭니다. 2. mysqldump를 사용하여 이전 데이터베이스를 내보내십시오. 3. 데이터를 새 데이터베이스로 가져옵니다. 4. 이전 데이터베이스를 삭제합니다.

C에서 싱글 톤 패턴을 구현하면 정적 멤버 변수 및 정적 멤버 함수를 통해 클래스의 인스턴스가 하나뿐입니다. 특정 단계에는 다음이 포함됩니다. 1. 개인 생성자를 사용하고 사본 생성자 및 할당 연산자를 삭제하여 외부 직접 인스턴스화를 방지합니다. 2. 정적 메소드 GetInstance를 통해 전역 액세스 포인트를 제공하여 하나의 인스턴스 만 생성되도록하십시오. 3. 스레드 안전의 경우 이중 확인 잠금 모드를 사용할 수 있습니다. 4. STD :: Shared_ptr과 같은 스마트 포인터를 사용하여 메모리 누출을 피하십시오. 5. 고성능 요구 사항의 경우 정적 로컬 변수를 구현할 수 있습니다. 싱글 톤 패턴은 글로벌 주 남용으로 이어질 수 있으며,이를주의해서 사용하고 대안을 고려하는 것이 좋습니다.
