- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <windows.h>
- int aa[9][9],mx=4,my=4,min;
- char a[9][9];
- char bestf;
- void tryf(char fx)
- {
- int i,j,tail,head,ax[1000],ay[1000],astep[1000],flag,tx,ty,px,py;
- int faji[6][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,1},{1,1}};
- int faou[6][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,-1},{1,-1}};
- //记录数组防止一个点在一次寻路中被走多变,从而死循环
- for(i=0;i<=8;i++)
- for(j=0;j<=8;j++)
- aa[i][j]=0;
- aa[mx][my]=1;
- if(fx=='U')
- { px=-1;py=0;}
- else if(fx=='R')
- { px=0;py=1;}
- else if(fx=='D')
- { px=1;py=0;}
- else if(fx=='L')
- { px=0;py=-1;}
- else if(fx=='l')
- { px=-1;py=-1;}
- else if(fx=='u')
- { px=-1;py=1;}
- else if(fx=='r')
- { px=1;py=1;}
- else if(fx=='d')
- { px=1;py=-1;}
-
- if(mx+px<0 || mx+px>8 || my+py<0 || my+py>8) return;
- if(a[mx+px][my+py]=='.')
- {
- tail=1;
- head=1;
- ax[tail]=mx+px; ay[tail]=my+py; astep[tail]=1;
- tail++;
- while(head!=tail)
- {
- flag=0;
- for(i=0;i<=5;i++)
- {
- if(ax[tail]%2==1)
- {tx=ax[head]+faji[i][0]; ty=ay[head]+faji[i][1];}
- else
- {tx=ax[head]+faou[i][0]; ty=ay[head]+faou[i][1];}
- if(tx<0 || tx>8 || ty<0 || ty>8) continue;//越界
- if(a[tx][ty]=='.' && aa[tx][ty]==0)
- {
- ax[tail]=tx;ay[tail]=ty;astep[tail]=astep[head]+1;
- aa[tx][ty]=1;
- tail++;
- if(tx==0 || tx==8 || ty==0 || ty==8)
- {
- flag=1;
- break;
- }
- }
- }
- if(flag==1)
- break;
- //printf("%d %d\n",head,tail);
- head++;//cong kuozhan chu de dian zai kuozhan
- }
- if(flag==1)
- {
- //printf("%d %c\n",astep[tail-1],fx);
- if(min>astep[tail-1])
- {
- min=astep[tail-1];
- bestf=fx;
- }
- }
- }
- return ;
- }
- int main()
- {
- int n=50,x,y,i,j,p,q;
-
- for(i=0;i<=8;i++)
- for(j=0;j<=8;j++)
- a[i][j]='.';
-
- a[mx][my]='M';
- srand((unsigned)time(NULL));
- for(i=1;i<=n;i++)
- {
- x=rand()%9;
- y=rand()%9;
- if(!(x==mx && y==my)) a[x][y]='@';
- }
-
- //
- for(i=0;i<=8;i++)
- {
- if(i%2!=0) printf(" ");
- for(j=0;j<=8;j++)
- printf(" %c",a[i][j]);
- printf("\n");
- }
- //game start
- while(1>0)
- {
- scanf("%d %d",&x,&y);
- while(a[x][y]!='.')
- {
- printf("input error,please input again ");
- scanf("%d %d",&x,&y);
- }
- a[x][y]='@';
- //
- system("cls");
- for(i=0;i<=8;i++)
- {
- if(i%2!=0) printf(" ");
- for(j=0;j<=8;j++)
- printf(" %c",a[i][j]);
- printf("\n");
- }
- //Sleep(1000);
-
- bestf='0';
- min=99999999;
- tryf('U');
- tryf('R');
- tryf('D');
- tryf('L');
- if(mx%2==1)
- {
- tryf('u');
- tryf('r');
- }
- else
- {
- tryf('l');
- tryf('d');
- }
- //
- if (bestf=='0')
- {
- printf("You Win\n");
- break;
- }
- a[mx][my]='.';
- if(bestf=='U')
- { mx=mx-1;my=my+0;}
- else if(bestf=='R')
- { mx=mx+0;my=my+1;}
- else if(bestf=='D')
- { mx=mx+1;my=my+0;}
- else if(bestf=='L')
- { mx=mx+0;my=my-1;}
- else if(bestf=='l')
- { mx=mx-1;my=my-1;}
- else if(bestf=='u')
- { mx=mx-1;my=my+1;}
- else if(bestf=='r')
- { mx=mx+1;my=my+1;}
- else if(bestf=='d')
- { mx=mx+1;my=my-1;}
- a[mx][my]='M';
- //printf("%d %c\n",min,bestf);
- system("cls");
- for(i=0;i<=8;i++)
- {
- if(i%2!=0) printf(" ");
- for(j=0;j<=8;j++)
- printf(" %c",a[i][j]);
- printf("\n");
- }
- if(mx==0 || mx==8 || my==1 || my==8)
- {
- printf("Game Over\n");
- break;
- }
- }
- system("pause");
- return 0;
- }
复制代码 |