惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
IT之家
IT之家
博客园 - 叶小钗
雷峰网
雷峰网
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美

博客园 - patrickwai

java enum用法 Java中哈希表(Hashtable)是如何实现的 注意for循环中变量的作用域 用SAX Parser(Simple API for XML)分析RSS android权限 【转】分治法求最大值最小值 JPA实体关系映射 JPA基本实体映射学习 Servlet实现基本文件上传 Servlet学习(一) 用javascript与正则表达式验证表单 - patrickwai - 博客园 java题目分析 java中的synchronized Spring学习——依赖注入 Spring学习——Hello World xml,javascript,XMLHttpRequest 学习笔记 向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析[转载] MySql存储过程学习 移位运算实际应用——判断整数N是否为2的阶次方
自己用C语言写的扫雷算法
patrickwai · 2010-03-22 · via 博客园 - patrickwai

先做一个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]);
}
}
}