搜索
查看: 201|回复: 4
打印 上一主题 下一主题

神经猫

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2019-1-30 11:49:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 神经猫下载
复制代码

楼主新帖
楼主热帖
沙发
 楼主| 发表于 2019-1-30 11:50:12 | 只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <windows.h>
  5. int aa[9][9],mx=4,my=4,min;
  6. char a[9][9];
  7. char bestf;
  8. void tryf(char fx)
  9. {
  10.     int i,j,tail,head,ax[1000],ay[1000],astep[1000],flag,tx,ty,px,py;
  11.     int faji[6][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,1},{1,1}};
  12.     int faou[6][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,-1},{1,-1}};
  13.     //记录数组防止一个点在一次寻路中被走多变,从而死循环
  14.         for(i=0;i<=8;i++)
  15.                 for(j=0;j<=8;j++)
  16.                         aa[i][j]=0;
  17.     aa[mx][my]=1;   
  18.     if(fx=='U')
  19.         { px=-1;py=0;}
  20.     else if(fx=='R')
  21.         { px=0;py=1;}
  22.     else if(fx=='D')
  23.         { px=1;py=0;}
  24.     else if(fx=='L')
  25.         { px=0;py=-1;}
  26.     else if(fx=='l')
  27.         { px=-1;py=-1;}
  28.     else if(fx=='u')
  29.         { px=-1;py=1;}
  30.     else if(fx=='r')
  31.         { px=1;py=1;}
  32.     else if(fx=='d')
  33.         { px=1;py=-1;}
  34.    
  35.     if(mx+px<0 || mx+px>8 || my+py<0 || my+py>8) return;
  36.     if(a[mx+px][my+py]=='.')
  37.     {
  38.                 tail=1;
  39.                 head=1;
  40.         ax[tail]=mx+px; ay[tail]=my+py; astep[tail]=1;
  41.         tail++;
  42.         while(head!=tail)
  43.         {
  44.                         flag=0;
  45.             for(i=0;i<=5;i++)
  46.             {
  47.                                 if(ax[tail]%2==1)
  48.                                         {tx=ax[head]+faji[i][0]; ty=ay[head]+faji[i][1];}
  49.                 else
  50.                                         {tx=ax[head]+faou[i][0]; ty=ay[head]+faou[i][1];}
  51.                 if(tx<0 || tx>8 || ty<0 || ty>8) continue;//越界
  52.                                 if(a[tx][ty]=='.' && aa[tx][ty]==0)
  53.                                 {
  54.                                         ax[tail]=tx;ay[tail]=ty;astep[tail]=astep[head]+1;
  55.                                         aa[tx][ty]=1;
  56.                                         tail++;
  57.                                         if(tx==0 || tx==8 || ty==0 || ty==8)
  58.                                         {
  59.                                                 flag=1;
  60.                                                 break;
  61.                                         }
  62.                                 }
  63.             }
  64.             if(flag==1)
  65.                                 break;
  66.             //printf("%d %d\n",head,tail);
  67.             head++;//cong kuozhan chu de dian zai kuozhan
  68.         }
  69.         if(flag==1)
  70.         {
  71.                         //printf("%d %c\n",astep[tail-1],fx);
  72.                         if(min>astep[tail-1])
  73.                         {
  74.                                 min=astep[tail-1];
  75.                 bestf=fx;
  76.             }
  77.         }
  78.     }
  79.     return ;
  80. }

  81. int main()
  82. {
  83.         int n=50,x,y,i,j,p,q;
  84.    
  85.     for(i=0;i<=8;i++)
  86.                 for(j=0;j<=8;j++)
  87.                         a[i][j]='.';
  88.    
  89.     a[mx][my]='M';
  90.     srand((unsigned)time(NULL));
  91.     for(i=1;i<=n;i++)
  92.     {
  93.                 x=rand()%9;
  94.                 y=rand()%9;
  95.                 if(!(x==mx && y==my)) a[x][y]='@';
  96.     }
  97.    
  98.         //
  99.         for(i=0;i<=8;i++)
  100.         {
  101.                 if(i%2!=0) printf(" ");
  102.                 for(j=0;j<=8;j++)
  103.                         printf(" %c",a[i][j]);
  104.                 printf("\n");
  105.         }
  106.     //game start
  107.         while(1>0)
  108.     {
  109.                 scanf("%d %d",&x,&y);
  110.                 while(a[x][y]!='.')
  111.                 {
  112.                         printf("input error,please input again ");
  113.                         scanf("%d %d",&x,&y);
  114.                 }
  115.                 a[x][y]='@';
  116.                 //
  117.         system("cls");
  118.                 for(i=0;i<=8;i++)
  119.                 {
  120.                         if(i%2!=0) printf(" ");
  121.                         for(j=0;j<=8;j++)
  122.                                 printf(" %c",a[i][j]);
  123.                         printf("\n");
  124.                 }
  125.         //Sleep(1000);
  126.         
  127.         bestf='0';
  128.         min=99999999;
  129.                 tryf('U');
  130.                 tryf('R');
  131.                 tryf('D');
  132.                 tryf('L');
  133.                 if(mx%2==1)
  134.                 {   
  135.                         tryf('u');
  136.                         tryf('r');
  137.                 }
  138.                 else
  139.                 {
  140.                         tryf('l');
  141.                         tryf('d');
  142.                 }       
  143.         //
  144.                 if (bestf=='0')
  145.         {
  146.                         printf("You Win\n");
  147.                         break;
  148.         }
  149.                 a[mx][my]='.';
  150.                 if(bestf=='U')
  151.                 { mx=mx-1;my=my+0;}
  152.                 else if(bestf=='R')
  153.                 { mx=mx+0;my=my+1;}
  154.                 else if(bestf=='D')
  155.                 { mx=mx+1;my=my+0;}
  156.                 else if(bestf=='L')
  157.                 { mx=mx+0;my=my-1;}
  158.                 else if(bestf=='l')
  159.                 { mx=mx-1;my=my-1;}
  160.                 else if(bestf=='u')
  161.                 { mx=mx-1;my=my+1;}
  162.                 else if(bestf=='r')
  163.                 { mx=mx+1;my=my+1;}
  164.                 else if(bestf=='d')
  165.                 { mx=mx+1;my=my-1;}
  166.                 a[mx][my]='M';
  167.                 //printf("%d %c\n",min,bestf);
  168.         system("cls");
  169.                 for(i=0;i<=8;i++)
  170.                 {
  171.                         if(i%2!=0) printf(" ");
  172.                         for(j=0;j<=8;j++)
  173.                                 printf(" %c",a[i][j]);
  174.                         printf("\n");
  175.                 }
  176.         if(mx==0 || mx==8 || my==1 || my==8)
  177.         {
  178.                         printf("Game Over\n");
  179.             break;
  180.         }
  181.         }
  182.         system("pause");
  183.         return 0;
  184. }
复制代码
板凳
 楼主| 发表于 2019-1-30 11:51:21 | 只看该作者
下载
为了凑字数(11111111111111111111111111111111111111)
地板
 楼主| 发表于 2019-1-30 11:51:42 | 只看该作者
下载
为了凑字数(11111111111111111111111111111111111111)

bfs-mao.c

3.65 KB, 下载次数: 2

点评

VS:"Perfect code. 0 error(s) 0 warning(s)"  发表于 2019-2-5 20:57
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表