C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[10044] 8퍼즐 프로그램인데요 에러는없는데 실행이 안돼네요.좀 도와주세요
현성이 [bhs00] 1392 읽음    2004-11-03 22:33
초기 노드를 랜덤하게 생성.
목적 노드도 적용했고,

랜덤 생성된 노드를 목적 노드로 언덕 등반 탐색으로 탐색을 합니다.
언덕 등반으로 탐색하면서
평원, 국부 최대, 해를 구할 수 있으며,
몇 번의 실행으로 해가 나와야 하는데.. 에러는없는데.. 왜 실행이 안됄까요...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void readData(int data[][5]);
void printPuz(int data[][5]);
void swap(int *dest, int *zero);
void formatArray(int dataArray[][5]);
int compare(int data1[][5],int data2[][5]);
void copyData(int oData[][5], int dData[][5]);
void searchVestValue(int data[][5], int sort[][5]);
void findZero(int data[][5]);

struct Position{
  int x;
  int y;
} position;


void main()
{
  int inputData[5][5], sortData[5][5];
  readData(inputData);
  printf("-------원본 값--------------------\n");
  printPuz(inputData);
//  readData(sortData);
  formatArray(sortData);
  sortData[1][1] =1;
  sortData[1][2] =2;
  sortData[1][3] =3;
  sortData[2][1] =8;
  sortData[2][2] =0;
  sortData[2][3] =4;
  sortData[3][1] =7;
  sortData[3][2] =6;
  sortData[3][3] =5;
  printf("-------목적 값--------------------\n");
  printPuz(sortData);

printf("----------------------------------\n");
   
  searchVestValue(inputData, sortData);
 
}

void searchVestValue(int inputData[][5], int sort[][5]){
// int i, j,
  int bestResult, compareResult, localMax;
  int tmp[5][5], data[5][5], best[5][5];
  bestResult=0;
  compareResult=0;

  copyData(inputData, best);
  printPuz(best);
  printf("compare=%d\n",compare(best,sort));
 
  while(1){
printf("----------------------------------\n");
    localMax = bestResult;
    copyData(best, data);
    copyData(data, tmp);
    findZero(data);
    printf("\nZERO POINT: x=%d y=%d\n", position.x, position.y);

    printf("MOVE 1\n");
    if(data[position.x][position.y-1] !=9){
      swap(&data[position.x][position.y-1],&data[position.x][position.y]);
      compareResult = compare(sort,data);
      if(8 == compareResult){
        copyData(data,best);
        bestResult = compareResult;
        break;
      }else if(bestResult < compareResult){
              copyData(data,best);
              bestResult = compareResult;
      }
      printf("compareResult=%d\n",compareResult);
      printPuz(data);
      copyData(tmp, data);
    }
/* -------------------------------------------------------------------*/
    printf("MOVE 2\n");
    if(data[position.x][position.y+1] !=9){
      swap(&data[position.x][position.y+1],&data[position.x][position.y]);
      compareResult = compare(sort,data);
      if(8 == compareResult){
        copyData(data,best);
        bestResult = compareResult;
        break;
      }else if(bestResult < compareResult){
              copyData(data,best);
              bestResult = compareResult;
      }
      printf("compareResult=%d\n",compareResult);
      printPuz(data);
      copyData(tmp, data);
    }
/* -------------------------------------------------------------------*/
    printf("MOVE 3\n");
    if(data[position.x-1][position.y] !=9){
      swap(&data[position.x-1][position.y],&data[position.x][position.y]);
      compareResult = compare(sort,data);
      if(8 == compareResult){
        copyData(data,best);
        bestResult = compareResult;
        break;
      }else if(bestResult < compareResult){
              copyData(data,best);
              bestResult = compareResult;
      }
      printf("compareResult=%d\n",compareResult);
      printPuz(data);
      copyData(tmp, data);
    }
/* -------------------------------------------------------------------*/
    printf("MOVE 4\n");
    if(data[position.x+1][position.y] !=9){
      swap(&data[position.x+1][position.y],&data[position.x][position.y]);
      compareResult = compare(sort,data);
      if(8 == compareResult){
        copyData(data,best);
        bestResult = compareResult;
        break;
      }else if(bestResult < compareResult){
              copyData(data,best);
      }
      printf("compareResult=%d\n",compareResult);
      printPuz(data);
    }
/* -------------------------------------------------------------------*/
    if(localMax >= bestResult ) break;
  }
  if(localMax >= bestResult ){
    printf("\n%d %d", localMax, bestResult);
    printf(" Lacal Maximum \n");
  }else{
    printf("Final compareResult=%d\n",compareResult);
    printPuz(best);
  }
}

void findZero(int data[][5])
{
  int i, j;
  for(i=1; i< 4 ; i++)
  {
    for(j=1 ; j<4 ; j++)
    {
      if(data[i][j] == 0)
      {
        position.x = i;
        position.y = j;
        break;
      }
    }
  }
}

int compare(int data1[][5],int data2[][5]){
  int counter=0;
  int i,j;

  for(i = 0 ; i < 5 ; i++){
    for(j=0 ; j < 5 ; j++){
      if(data1[i][j] == data2[i][j]){
        if(data1[i][j] == 0 && data2[i][j]==0)
          continue;
        counter++;
      }
    }
  }
    return counter-16;
}

void copyData(int Data1[][5], int Data2[][5]){
  int i, j;
  formatArray(Data2);
  for(i=1; i< 4 ; i++){
    for(j=1 ; j<4 ; j++){
      Data2[i][j] = Data1[i][j];
    }
  }
}

void swap(int *dest, int *zero){
  int tmp = *dest;
  *dest = *zero;
  *zero = tmp;
}
void readData(int data[][5]){
  int flag[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
  int tmp, r,c;
  int i=0;
  int num[9];
  formatArray(data);
  while(i <9){
    tmp =rand()%9+1;
    if(flag[tmp] < 0){
      num[i] = tmp;
      flag[tmp] =1 ;
        i++;
    }
  }
  for(i=0; i<9;i++){
      printf("%d-", num[i]);
  }
      printf("\n");
  i=0;

  for(r=1 ; r < 4 ; r++){
    for(c = 1 ; c < 4 ; c++){
      data[r][c] = num[i];
      i++;
    }
  }
   
}

/*
void readData(int data[][5]){
  FILE *fp;
      data[r][c] = num[i];
      i--;
    }
  }
   
}

/*
void readData(int data[][5]){
  FILE *fp;
  int tmp;
  int r,c;
  char fileName[20];

  printf("\ninput Data file name => ");
  fflush(stdin);
  gets(fileName);

  if( ( fp = fopen(fileName, "r") ) == NULL ){
    printf("this file is not find\n");
    exit(1);
 
  }
  formatArray(data);

  for(r=1 ; r < 4 ; r++){
    for(c = 1 ; c < 4 ; c++){
      fscanf(fp, "%d", &tmp);
      data[r][c] = tmp;
    }
  }
fclose(fp);

} */

void printPuz(int data[][5]){
  int r,c;
  for(r=1 ; r < 4 ; r++){
    for(c = 1 ; c < 4 ; c++){
      printf("%d ",data[r][c]);
    }
    printf("\n");
  }
}

void formatArray(int dataArray[][5]){
  int r,c;
  for(r=0 ; r < 5 ; r++){
    for(c = 0 ; c < 5 ; c++){
      dataArray[r][c] = 9;
    }
  }
}
이점한 [redyouth]   2004-11-04 17:20 X
숙제는 혼자 힘으로 합시다. ㅡ.,ㅡ+ 그리고 Q&A 가야 되는것 같은데...

+ -

관련 글 리스트
10044 8퍼즐 프로그램인데요 에러는없는데 실행이 안돼네요.좀 도와주세요 현성이 1392 2004/11/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.