C++인 스 턴 스 의 9 궁 격 범위 우선 옮 겨 다 니 기

3486 단어 C++구 궁 격
C++인 스 턴 스 의 9 궁 격 범위 우선 옮 겨 다 니 기
기본 사고방식:
광 도 를 우선 옮 겨 다 니 며 1 의 위 치 를 찾 을 때마다 각각 위로,아래로,왼쪽으로,오른쪽으로 이동 합 니 다.이동 한 후의 모든 상 태 를 대기 열 에 저장 하고 팝 업 헤드 를 꺼 내 최종 결과 상태 인지 판단 합 니 다.만약 에 출력 이 옮 겨 다 니 는 층수(즉 이동 걸음 수)가 아니라면 현 단계 상 태 를 계속 실행 하여 1 을 찾 아 위로,아래로,오른쪽으로 이동 합 니 다.

#include<stdio.h> 
 
typedef struct MyType 
{ 
  int number[3][3];int level; 
}MyType; 
 
MyType queue[10000]; 
 
MyType GetHead(int n) 
{ 
  return queue[n]; 
} 
 
//          
int IsFind(MyType cur) 
{ 
  int flag=1; 
  for(int i=0;i<3;i++) 
    for(int j=0;j<3;j++) 
    { 
      if(cur.number[i][j]!=3*i+j+1) 
      { 
        flag=0; 
        break; 
      } 
    } 
  return flag; 
} 
 
int main() 
{ 
   
  int cnt=0;//      
  int flag=0;//        
  int ans=0;//    ,        
  int head=0;//      , head       
  for(int m=0;m<3;m++) 
  { 
    for(int n=0;n<3;n++) 
    { 
      scanf("%d",&queue[cnt].number[m][n]); 
    } 
  } 
  queue[cnt].level=0; 
  cnt++; 
  while(cnt!=0) 
  { 
    //   
    MyType cur=GetHead(head++); 
    //          
    flag=IsFind(cur); 
    if(flag==1) 
    { 
      printf("     :%d
",cur.level); break; } else // , { for(int row=0;row<3;row++) for(int col=0;col<3;col++) { if(cur.number[row][col]==1) // 1, { // 1 if(row!=0) { MyType temp=cur; temp.number[row][col]=temp.number[row-1][col]; temp.number[row-1][col]=1; temp.level=cur.level+1; queue[cnt++]=temp; } // 1 if(col!=2) { MyType temp=cur; temp.number[row][col]=temp.number[row][col+1]; temp.number[row][col+1]=1; temp.level=cur.level+1; queue[cnt++]=temp; } // 1 if(row!=2) { MyType temp=cur; temp.number[row][col]=temp.number[row+1][col]; temp.number[row+1][col]=1; temp.level=cur.level+1; queue[cnt++]=temp; } // 1 if(col!=0) { MyType temp=cur; temp.number[row][col]=temp.number[row][col-1]; temp.number[row][col-1]=1; temp.level=cur.level+1; queue[cnt++]=temp; } } } } } return 0; }

문 제 는 아직 이해 하지 못 한 것 이다.주어진 초기 상태 가 풀 리 지 않 는 다 는 것,즉 최종 결과 상태 에 도달 할 수 없다 는 것 을 어떻게 판단 하 느 냐 는 것 이다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기