"执着不是因为奢望而是因为珍惜" 扫雷小算法 2006-08-3

  这是自从上星期1以来再一次恢复写程序.能恢复我感觉很好,虽然困难丝毫没有减少还增加了.

  我仍然对那个ACM的题依次做,在继几个AC率很低的问题以后,遇到了连续的简单问题. 除了一道交换机的问题以外,其他的不是很容易就是做过雷同的,一直来到这个 MINE的题目.其实我本不想做,因为通过率有42%,但作为经典,还是重视一下吧:

 #include <stdio.h>

#define N 50

bool mine[N][N];
char display[N][N];

int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};

int Around(int x,int y,int n){
 int sum=0;
 int a,b;
 for(int i=0;i<=7;i++){
  a=x+dx[i];
  b=y+dy[i];
  if(a>=0&&a<n&&b>=0&&b<n&&mine[a][b]==true){
   sum++;
  }
 }
 return sum;
}
char itoc(int sum){
 return sum+48;
}
void Extend(int x,int y,int n){
 int a,b,sum=0;
 if((sum=Around(x,y,n))==0){
  display[x][y]=' ';
  for(int i=0;i<=7;i++){
   a=x+dx[i];
      b=y+dy[i];
   if(a>=0&&a<n&&b>=0&&b<n&&mine[a][b]==false)
    if(display[a][b]=='O')
     Extend(a,b,n);
  }
 }
 else display[x][y]=itoc(sum);
 
}
void checkMine(int x,int y,int n){
 if(y>=0&&y<n&&x>=0&&x<n){
  if(mine[x][y]==true)
  {
   printf("You Lose!/n");
   return;
  }
  else{
   Extend(x,y,n);
  }
  for(int i=0;i<n;i++){
   for(int j=0;j<n;j++){
    printf("%c",display[i][j]);
   }
      printf("/n");
  }
 }
 else{printf("wrong input/n");}
}

int main(){
 int n=10;
  mine[8][9]=mine[3][3]=mine[1][1]=true;
 for(int i=0;i<n;i++){
  for(int j=0;j<n;j++){
   display[i][j]='O';
  }
 }
 checkMine(0,0,n);
 printf("/n");

 checkMine(3,1,n);

 return 0;
}

空格代表点开的地方,0代表未知的地方.

我高兴的是时间用的不长,中间发现由于不了解规则而疏忽的地方但马上便更改过来了.

简单的问题仍然不到一半的通过率,足见考试的紧张程度.

就是这样,稍微测试一下,有问题还请提出.

 

学校似乎又改变主意了,可能仍然多凑人参赛.虽然那个庄B胖子答应可以培训,却多次诓他们,这次星期5就是明天还说讲课.

让他们见鬼去吧,SB学校,SB庄胖子,SB阙丽.让我参加比赛我也不去了,除非跪在地上求苦苦哀求老子!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值