[데이터 구조] 게임 보조 문제 풀이 보고서 연속 보기

2536 단어
Problem Description
'연보' 는 퍼 즐 게임 이다.'연속 보기' 는 같은 두 장의 카드 를 세 개 이내 의 직선 으로 연결 하면 없어 지고 규칙 은 쉽게 손 에 들어온다.이 문제 의 작성 자 는 시 뮬 레이 션 을 통 해 게임 을 계속 볼 수 있 습 니 다. 컴퓨터 시 뮬 레이 션 을 하 는 과정 은 다음 과 같 습 니 다. 1. 본 게임 을 분석 하고 이 게임 을 두 개의 배열 로 바 꿉 니 다.0 은 공백 구역 을 나타 내 고 숫자 는 이 게임 카드 가 게임 에 나타 난 몇 번 째 게임 카드 임 을 나타 낸다.2. 광범 위 한 우선 검색 알고리즘 을 이용 하여 두 게임 카드 가 없어 질 수 있 는 지 판단 합 니 다.3. 프로그램 시 뮬 레이 터 가 클릭 하면 제거 할 수 있 는 게임 카드 한 쌍 을 제거 합 니 다.한 게임 에 대해 2 차원 배열 로 전환 하면 다음 과 같다. 0 0 0 0 0 0 0 0 01 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 은 두 배열 의 줄, 열, 두 배열, 시작 요소 의 좌표, 종료 요소 의 좌 표를 입력 하여 시작 게임 카드 와 종료 게임 카드 가 없어 질 수 있 는 지 판단 한다.
입력
4 5
0 0 0 0 0 0 1 2 0 0 0 0 3 4 0 0 0 0 1 0
1 1 
3 3

출력
TRUE

AcCode
//
//  main.cpp
//         
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017  jetviper. All rights reserved.
//

#include 
#define  up 1
#define  down 2
#define  left 3
#define  right 4
int chess[1000][1000]={0};
int reach[1000][1000]={0};
int n,l;
int startx,starty,endx,endy;
void bfs(int x,int y,int count,int way){
    if(count>3||x<0||y<0||x>(n-1)||y>(l-1))return;
    if(chess[x][y]!=chess[startx][starty]&&chess[x][y]!=0)return;
    if(reach[x][y]==0||reach[x][y]>=count){
        reach[x][y]=count;
        switch(way){
            case up:{
                bfs(x-1,y,count,up);
                bfs(x,y+1,count+1,right);
                bfs(x+1,y,count+1,down);
                bfs(x,y-1,count+1,left);
                break;
            }
            case right:{
                bfs(x-1,y,count+1,up);
                bfs(x,y+1,count,right);
                bfs(x+1,y,count+1,down);
                bfs(x,y-1,count+1,left);
                break;
            }
            case down:{
                bfs(x-1,y,count+1,up);
                bfs(x,y+1,count+1,right);
                bfs(x+1,y,count,down);
                bfs(x,y-1,count+1,left);
                break;
            }
            case left:{
                bfs(x-1,y,count+1,up);
                bfs(x,y+1,count+1,right);
                bfs(x+1,y,count+1,down);
                bfs(x,y-1,count,left);
                break;
            }
        }
    }
    
}

int main() {
    
    scanf("%d%d",&n,&l);
    
    for(int i =0;i0){
        printf("TRUE
"); } else { printf("FALSE
"); } return 0; }

좋은 웹페이지 즐겨찾기