扫雷游戏

什么是CAP理论?

2000年八月,加州大学Berkeley分校的埃里克 Brewer助教在ACM
PODC会议上提议CAP臆想。2年后俄亥俄布尔萨分校高校的Seth
吉尔伯特和南希Lynch从理论上证实了CAP,之后CAP理论专业成为分布式总括领域的公认定理。

CAP理论是由上边多个概念组成的,且在分布式系统中三者不恐怕兼得,只可以同时满足二种规格。

一致性(C)

All nodes see the same data at the same time

拥有数据库集群节点在同一时间点来看的多寡完全一致,即具备节点能实时保持数据同步。

可用性(A)

Reads and writes always succeed

读写操作永远是打响的。即服务一贯是可用的,尽管集群一部分节点故障,集群全体还是能健康响应客户端的读写请求。

分区容错性(P)

The system continues to operate despite arbitrary message loss or
failure of part of the system

澳门美高梅手机网站,尽管系统中有私自的新闻丢失或故障,系统仍在此起彼伏运转。以实际效果而言,分区也就是对通讯的年限需要。系统一旦不可以在限期内完结数据一致性,就象征发生了分区的情景,必须就当下操作在C和A之间做出抉择。

题材叙述

CAP权衡使用

1、保留CA,放弃P

固然想避免分区容错性难点的暴发,一种做法是将具有的多少(与工作相关的)都位于一台机械上。尽管无法100%保障系统不会出错,但不会遇到由分区带来的阴暗面效果。当然这些选项会严重的震慑系统的扩大性。

作为一个分布式系统,抛弃P,即一对一于放任了分布式,一旦并发性很高,单机服务根本无法经受压力。

像许多银行服务,确确实实就是割舍了P,只用单台小型机+ORACLE有限协理服务可用性。

2、保留CP,放弃A

相对于放任“分区容错性“来说,其反面就是舍弃可用性。一旦遇见分区容错故障,那么受到震慑的劳动须求等待一定的时刻,因而在等候时期系统不能对外提供劳务。

作为分布式系统,有分区服务爆发难点很有可能,假设因为一些服务不只怕用,导致整个服务都不大概用,这么些平素不是好的分布式系统。

3、保留AP,舍弃C

此地所说的吐弃一致性,并不是一点一滴甩掉数据一致性,而是放弃数据的强一致性。即放任了扳日常刻的多少一致性,而保留数据的最终一致性。

以互连网购物为例,对只剩余一件库存的商品,假使还要接受到了两份订单,那么较晚的订单将被告知商品告罄。

日常景况下,很多分布式服务系统都以利用该方案,有限支撑可用性性,分布式服务,因为一些分区服务发生难题,先容忍,最后经过一些折中的方法达到最终数额一致性。

号外:只要从简书过来关心人世微信公众号的,在民众号中回复MM,可避防费送干货:2TB架构师四品级视频教程个中的素材。

扫雷游戏是一款尤其经典的单机小游戏。在n行m列的雷区中有一对格子含有地雷(称之为地雷格),其余格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提醒周围格子中有稍许个是地雷格。游戏的对象是在不翻出任哪个地点雷格的条件下,找出富有的非地雷格。

推介阅读


民用收藏最全Spring
Boot全套摄像教程

分享一套高档视频教程:Dubbo+Zookeeper+ActiveMQ+Redis体系

享用一套分布式架构设计高级摄像教程

享受一套Hadoop全套视频教程序列

去BAT面试完的Mysql面试题计算(55道,带完整答案)

阿里高档Java面试题(头阵,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回去的面试题及答案

Spring面试题(70道,史上最全)

向阳大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门消息等。

近日交给n行m列的雷区中的地雷分布,必要测算出各样非地雷格周围的地雷格数。

注:一个格子的周围格子包涵其上、下、左、右、左上、右上、左下、右下七个样子上与之直接相邻的格子。

输入输出格式

输入格式:

 

输入文件首先行是用一个空格隔开的七个整数n和m,分别表示雷区的行数和列数。

接下去n行,每行m个字符,描述了雷区中的地雷分布情形。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。

 

输出格式:

 

输出文件包涵n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

 

输入输出样例

输入样例#1:

3 3
*??
???
?*?

输出样例#1:

*10
221
1*1

输入样例#2:

2 3
?*?
*??

出口样例#2:

2*1
*21

说明

对于 100%的数据, 1≤n≤100, 1≤m≤100。

思路:

枚举每一个点,再枚举这几个点的
上下左右以及对角线上的三个点,把雷的数据累加起来

做那一个题直接是韬光晦迹,游戏人生。。。

 1 #include<iostream>
 2 using namespace std;
 3 int map[101][101];
 4 int e[8][2]={{0,1},{0,-1},{-1,0},{1,0},{1,1},{1,-1},{-1,-1},{-1,1}};
 5 string s;
 6 int n,m;
 7 int main()
 8 {
 9     cin>>n>>m;
10     for(int i=1;i<=n;i++)
11     {
12         cin>>s;
13         for(int j=0;j<=m-1;j++)
14             if(s[j]=='*')map[i][j+1]=-1;
15             else map[i][j+1]=0;
16     }
17     for(int i=1;i<=n;i++)
18         for(int j=1;j<=m;j++)
19             if(map[i][j]!=-1)
20                 for(int k=0;k<8;k++)
21               {
22                 int x=i+e[k][0],y=j+e[k][1];
23                 if(x<=n&&x>=1&&y<=m&&y>=1&&map[x][y]==-1)
24                    map[i][j]++;
25               }
26     for(int i=1;i<=n;i++)
27     {
28         for(int j=1;j<=m;j++)
29         if(map[i][j]==-1)cout<<"*";
30         else cout<<map[i][j];
31         cout<<endl;
32     }
33       
34 }

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注