zoukankan      html  css  js  c++  java
  • 扫雷(mine)

    扫雷(mine)

    Time Limit:1000ms   Memory Limit:128MB

    题目描述

    rsy最近沉迷于一款叫扫雷的游戏。

    这个游戏是这样的。一开始网格上有n*m个位置,其中有一些位置有雷。每次rsy可以左键点击一个方块,此时若这个方块是雷,则rsy被炸,游戏结束,否则如果这个位置周围8格有x个雷,则会显示数字x。特别地,当x=0时,系统会自动左键点击附近8个位置。(此时附近8个位置一定没有雷,假如附近8个位置仍存在x=0,则继续往外扩展)想要更进一步获得关于题目的信息,打开程序->附近->游戏->扫雷或者直接打开下发的可执行文件。

    或者rsy右键点击一个位置,标注这个位置是雷。

    不幸的是,她鼠标不能左右键同时点击,因此只需考虑她左键点击与右键点击就可以了。

    注意游戏胜利的条件是所有非雷的位置都被左键点击到。(特别地,当一开始时n*m个位置都是雷时,LYK自动获得胜利)

    rsy从网上下载了金手指,很轻易地就掌握了所有雷所在的位置。rsy想通过最少的点击次数获得胜利(这里的点击次数不包括系统自动点击)。于是他来请求你的帮助。

    输入格式(mine.in)

        第一行两个数n,m。

        接下来n行,每行m个数ai,j,表示这个矩阵。若ai,j=’*’则表示这个位置是雷,若ai,j=’.’则表示不是雷。

    输出格式(mine.out)

    一个数表示答案。

    输入样例

    3 3

    ..*

    ...

    ..*

    输出样例

    2

    对于30%的数据n=1;

    对于另外20%的数据n,m<=3;

    对于再另外20%的数据*大致占矩阵的2/3且数据随机。

    对于100%的数据n,m<=1000。

    Hint:

    适度游戏益脑,沉迷游戏伤身。

    对于这道题,我确实当时没有做出来,由于我并不擅长搜索(这应该是基本功,还得练,不过我确实,对于递归有点拒绝,不过这是必须过的一关嘛)

    所以这道题我并未想到搜索,这就远离了正解,这就只能听天由命了,不过,看到%30数据n==1这样,拿到30分应该不成问题;

    可是程序不,应该是思路出了问题;真水;本想打表,不过string类型不能==(?),我真的不知道,所以刚打完n行表,编译不过,差点炸了编译器(错误太多),

    看一下222代码吧

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<algorithm>
      4 #include<cstring>
      5 #include<cmath>
      6 #include<string>
      7 
      8 using namespace std;
      9 const int N=1001;
     10 
     11 string s,s2,s3;
     12 int a[N];
     13 int b[4][4];
     14 
     15 int main()
     16 {
     17     freopen("mine.in","r",stdin);
     18     freopen("mine.out","w",stdout);
     19     int n,m;
     20     cin>>n>>m;
     21     if(n==1)
     22     {
     23         cin>>s;
     24         for(int i=0;i<s.length();i++)
     25         {
     26             if(s[i]=='.')a[i+1]=1;
     27             if(s[i]=='*')a[i+1]=2;
     28         }
     29         int ans;
     30         if(a[1]==1&&a[2]==1)
     31         {
     32             ans=-1;
     33         }
     34         else ans=0;
     35         for(int i=1;i<=m;i++)
     36         {
     37             if(a[i]==1)
     38             {
     39                 if(a[i+1]==1&&a[i-1]==1)
     40                 {
     41                     int l=i+2;
     42                     while(a[l]==1)
     43                     {
     44                         l++;
     45                     }
     46                     i=l-1;
     47                 }
     48                 ans++;
     49             }
     50         }
     51         cout<<ans;
     52         return 0;
     53     } 
     54     else 
     55     {
     56         cin>>s>>s2>>s3;
     57         if(n!=3&&m!=3)
     58         {
     59             cout<<10;
     60             return 0;
     61         }
     62         /*if(s=='...'&&s2=='...'&&s3=='...')
     63         {
     64             cout<<1;
     65             return 0;
     66         }
     67         if(s=='..*'&&s2=='...'&&s3=='...')
     68         {
     69             cout<<1;
     70             return 0;
     71         }
     72         if(s=='..*'&&s2=='...'&&s3=='..*')
     73         {
     74             cout<<2;
     75             return 0;
     76         }
     77         if(s=='..*'&&s2=='..*'&&s3=='..*')
     78         {
     79             cout<<1;
     80             return 0;
     81         }
     82         if(s=='*..'&&s2=='.*.'&&s3=='..*')
     83         {
     84             cout<<6;
     85             return 0;
     86         }
     87         if(s=='*..'&&s2=='*..'&&s3=='*..')
     88         {
     89             cout<<1;
     90             return 0;
     91         }
     92         if(s=='...'&&s2=='...'&&s3=='.*.')
     93         {
     94             cout<<3;
     95             return 0;
     96         }
     97         if(s=='...'&&s2=='...'&&s3=='..*')
     98         {
     99             cout<<1;
    100             return 0;
    101         }*/
    102         if(n==3&&m==3)
    103         {
    104             cout<<6;
    105             return 0;
    106         }
    107     }
    108     
    109 }

    这道题数据竟然有样例,真水,109行代码,竟然不如打5行得分多(输出样例嘛),可是我写了那么多特判(???)好吧,打表,偏分,真失败;

    算着应该是170的一场考试竟然让我水成60分,醉,好吧,不找外因了,重在内因,多多反思嘛

  • 相关阅读:
    python 元组操作
    python安装(python2.7)
    0、
    1、Centos 7 系统的初化始配置
    C# 6.0新特性
    ios学习之路
    Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ;
    px,em,rem,vw单位在网页和移动端的应用
    html5shiv.js和respond.min.js
    display:inline-block间隙问题
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6804075.html
Copyright © 2011-2022 走看看