zoukankan      html  css  js  c++  java
  • 自己用C语言写的扫雷算法

    先做一个10×10表格图,通过下图分析

    0代表无雷,1代表地雷,4个顶点表格周围各有3个表格,4个边边(出去4个顶点)中每个格周围有5个格,剩下的每个格周围都有7个格。

    为了计算表格周围的地雷数目,用9来代表地雷,以防止地雷数目标记和地雷标记冲突。如下图:

    看来地雷不少啊。

    代码实现如下,代码的可读性不高,请提点建议。

    //以下是排雷算法

    #include
    <stdafx.h>
    #include
    <stdlib.h>
    #include
    <time.h>


    void main(){
    int array1[10][10],array2[10][10];
    int i,j,m,n;
    srand((unsigned)time(NULL));
    //对array1赋值,1代表地雷,0代表无雷
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
    array1[i][j]
    =(int)((double)rand()/(double)RAND_MAX+0.5);
    if(j%10==0)
    printf(
    "\n\n");
    printf(
    "%4d",array1[i][j]);
    }
    }

    //将地雷标记为9
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
    if(array1[i][j]==1)
    array1[i][j]
    =9;
    }
    }
    //初始化array2,全部赋值0
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
    array2[i][j]
    =0;
    }
    }
    //计算每一格周围8个格的地雷数目
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
    if(array1[i][j]==0){
    if((i==0)&&(j==0)){
    for(m = 0;m<2;m++){
    for(n=0;n<2;n++){

    if(array1[i+1][j+1]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i==9)&&(j==9)){
    for(m=0;m<2;m++){
    for(n=0;n<2;n++){
    if(array1[i-1+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i==0)&&(j==9)){
    for(m=0;m<2;m++){
    for(n=0;n<2;n++){
    if(array1[i+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i==9)&&(j==0)){
    for(m=0;m<2;m++){
    for(n=0;n<2;n++){
    if(array1[i-1+m][j+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i>0)&&(i<9)&&(j==0)){
    for(m=0;m<3;m++){
    for(n=0;n<2;n++){
    if(array1[i-1+m][j+n])
    array2[i][j]
    ++;
    }
    }
    }
    else if((i==0)&&(j>0)&&(j<9)){
    for(m=0;m<2;m++){
    for(n=0;n<3;n++){
    if(array1[i+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i==9)&&(j>0)&&(j<9)){
    for(m=0;m<2;m++){
    for(n=0;n<3;n++){
    if(array1[i-1+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i>0)&&(i<9)&&(j==9)){
    for(m=0;m<3;m++){
    for(n=0;n<2;n++){
    if(array1[i-1+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    else if((i>0)&&(i<9)&&(j<0)&&(j<9)){
    for(m=0;m<3;m++){
    for(n=0;n<3;n++){
    if(array1[i-1+m][j-1+n]==9)
    array2[i][j]
    ++;
    }
    }
    }
    }
    else{
    array2[i][j]
    =9;
    }

    }
    }
    //打印地雷图
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
    if(j%10==0)
    printf(
    "\n\n");
    printf(
    "%4d",array2[i][j]);
    }
    }
    }
  • 相关阅读:
    Dockfile 使用 非root 用户运行容器
    Latex 小记
    Tmux 小技巧
    配置本地 overleaf
    arm板载ubuntu18.04系统安装QT4.8.7
    移植32位QT程序到ubuntu18.04
    TLS1.0禁用问题
    TLS1.0禁用问题
    Delphi程序“自杀”的有效办法
    Delphi7程序出现“EOSError code8-存储不足”问题的分析与解决
  • 原文地址:https://www.cnblogs.com/goodwin/p/1691871.html
Copyright © 2011-2022 走看看