最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++連連看判定圖形消除算法

 更新時間:2019年12月12日 08:36:51   作者:yyhejun  
這篇文章主要為大家詳細介紹了C++連連看判定圖形消除算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

我們玩過的連連看游戲,通過選定兩個圖形相同的元素,判定其是否可在三次轉(zhuǎn)彎內(nèi)連接起來,若能,則消去,若不能,則不可消去,直至最后全部消除。

本算法中不包括關(guān)于死鎖狀態(tài)判定。

// 連連看.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream.h>
#include <vector>
#include <queue>
 
 
using namespace std;
 
struct Point
{
  int x;
  int y;
};
 
int pushonelinespot(Point a,Point b,int c[6][6], queue<Point> &g)  //將a點可直線到達的點壓入隊列g(shù)中
{
  int i;
  Point temp;
  for(i=1;;i++)  //向下檢測
   { if((a.x+i)<=5&&c[a.x+i][a.y]==0)
      { 
    temp.x=a.x+i;temp.y=a.y;  
     g.push(temp);}  
     else if(c[a.x+i][a.y]!=0&&(a.x+i)<=5)
      {if((a.x+i)==b.x&&a.y==b.y) return 1;
       else break;}
     else break;
    }
   for(i=-1;;i--)   //向上檢測
   { if(c[a.x+i][a.y]==0&&(a.x+i)>=0)
      { temp.x=a.x+i;temp.y=a.y;  
       g.push(temp);}
     else if(c[a.x+i][a.y]!=0&&(a.x+i)>=0)
      {if((a.x+i)==b.x&&a.y==b.y) return 1;
       else break;}
     else break;
    }
   for(i=1;;i++)   //向右檢測
   { if(c[a.x][a.y+i]==0&&(a.y+i)<=5)
      { temp.x=a.x;temp.y=a.y+i;  
       g.push(temp);}
     else if(c[a.x][a.y+i]!=0&&(a.y+i)<=5)
      {if(a.x==b.x&&(a.y+i)==b.y) return 1;
       else break;}
     else break;
    }
   for(i=-1;;i--)  //向左檢測
   { if(c[a.x][a.y+i]==0&&(a.y+i)>=0)
      { temp.x=a.x;temp.y=a.y+i;  
       g.push(temp);}
     else if(c[a.x][a.y+i]!=0&&(a.y+i)>=0)
      {if(a.x==b.x&&(a.y+i)==b.y) return 1;
       else break;}
     else break;
    }
   return 0;
}
 
bool shortestline(Point a,Point b,int c[6][6])
{
  if(c[a.x][a.y]==c[b.x][b.y])
  {
  Point temp;
  queue<Point> X,Y,Z;
  int i;
  i=pushonelinespot(a,b,c,X);
  if(i==1) return 1;
  while(!X.empty())
   { temp=X.front();X.pop();
    i=pushonelinespot(temp,b,c,Y);
    if(i==1) return 1; }  //第一次轉(zhuǎn)彎
   while(!Y.empty())
    { temp=Y.front();Y.pop();
     i=pushonelinespot(temp,b,c,Z);
     if(i==1) return 1;}  //第二次轉(zhuǎn)彎
 cout<<"轉(zhuǎn)彎路徑大于兩次"<<endl;
   return 0;
  }
 else if(c[a.x][a.y]==0||c[b.x][b.y]==0) {cout<<"圖形已空,請重新輸入:"<<endl;}
  else { cout<<"兩圖形不相同"<<endl;return 0;}
}
 
int main()
{
  int v,i,j;
  int c[6][6]={{0,0,0,0,0,0},{0,1,3,3,4,0},{0,0,6,4,0,0},{0,4,0,2,1,0},{0,6,0,4,2,0},{0,0,0,0,0,0}};
/*  for(i=0;i<6;i++)
    {for(j=0;j<6;j++)
  c[i][j]=0;}            //初始化二維數(shù)組
  cout<<"請初始化數(shù)組矩陣:"<<endl;
  while(cin>>value)           //輸入控制
    {
      for(i=0;i<6;i++)
       {for(j=0;j<6;j++)
         c[i][j]=value;}
    } //初始化二維數(shù)組;//while*/ 
 for(i=0;i<6;i++)
    {
   for(j=0;j<6;j++)
   cout<<"    "<<c[i][j]<<"  ";cout<<endl;
  };
 Point a,b;
  
 
   for(i=0;;i++)
  {
  int sum=0;
  cout<<"請輸入坐標:"<<endl;
    cin>>a.x>>a.y>>b.x>>b.y;
   if(a.x>0&&a.x<5&&a.y>0&&a.y<5&&b.x>0&&b.x<5&&b.y>0&&b.y<5)
   { 
 if(a.x==b.x&&a.y==b.y) {cout<<"不可輸入相同坐標,請重新輸入:"<<endl;continue;}
 v=shortestline(a,b,c);
    if(v==1)
 {
  c[a.x][a.y]=0;c[b.x][b.y]=0;
         cout<<"成功消除"<<endl;
 } 
  }
    else cout<<"坐標輸入有誤,請重新輸入:"<<endl; 
  for(i=0;i<6;i++)
    {
   for(j=0;j<6;j++)
       sum+=c[i][j];
  };
  if(sum==0) break;
   for(i=0;i<6;i++)
    {
   for(j=0;j<6;j++)
   cout<<"    "<<c[i][j]<<"  ";cout<<endl;
  };
 };
 cout<<"恭喜過關(guān)。"<<endl;
 getchar();
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討

    基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討

    本篇文章是對在c中使用ftruncate()前需要fflush(),使用后需要rewind()進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中多才多藝的 const

    C++中多才多藝的 const

    在C++中,關(guān)鍵字const可以用來修飾任何作用域內(nèi)的變量、函數(shù)參數(shù)、函數(shù)本體、函數(shù)返回值、成員函數(shù)、迭代器,也可以用來修飾指針本身和指針目標,可謂多才多藝,我們要詳細了解其內(nèi)部細節(jié),以及邏輯奧秘,讓這把多功能瑞士軍刀盡情發(fā)揮其作用,需要的朋友可以參考一下
    2021-09-09
  • C語言字符串替換空格實例詳解

    C語言字符串替換空格實例詳解

    這篇文章主要為大家詳細介紹了C語言字符串替換空格實例,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 深入HRESULT與Windows Error Codes的區(qū)別詳解

    深入HRESULT與Windows Error Codes的區(qū)別詳解

    本篇文章是對HRESULT與Windows Error Codes的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C語言求解撲克牌的順子及n個骰子的點數(shù)問題

    使用C語言求解撲克牌的順子及n個骰子的點數(shù)問題

    這篇文章主要介紹了使用C語言求解撲克牌的順子及n個骰子的點數(shù)問題的方法,解答實例主要為了突出解題的算法,需要的朋友可以參考下
    2016-03-03
  • c++ 排查內(nèi)存泄漏的妙招

    c++ 排查內(nèi)存泄漏的妙招

    這篇文章主要介紹了c++ 如何用輔助類排查內(nèi)存泄漏,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++強制轉(zhuǎn)換與智能指針示例詳解

    C++強制轉(zhuǎn)換與智能指針示例詳解

    這篇文章主要介紹了C++強制轉(zhuǎn)換與智能指針示例,智能指針(Smart Pointer)是一種抽象的數(shù)據(jù)類型。在程序設(shè)計中,它通常是經(jīng)由類模板來實現(xiàn),借由模板來達成泛型,借由類別的析構(gòu)函數(shù)來達成自動釋放指針所指向的存儲器或?qū)ο?/div> 2022-11-11
  • 利用C++實現(xiàn)一個線程安全的map

    利用C++實現(xiàn)一個線程安全的map

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)一個線程安全的map(使用ChatCPT生成),代碼是通過兩輪對話完善的,感興趣的小伙伴可以了解一下
    2023-05-05
  • 深入了解C++的多態(tài)與虛函數(shù)

    深入了解C++的多態(tài)與虛函數(shù)

    這篇文章主要為大家詳細介紹了C++多態(tài)與虛函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-07-07
  • 詳解C語言實現(xiàn)推箱子的基本功能(2)

    詳解C語言實現(xiàn)推箱子的基本功能(2)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子的基本功能的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論

文成县| 桦甸市| 如皋市| 德钦县| 莱西市| 孙吴县| 大城县| 澜沧| 武乡县| 中卫市| 冀州市| 澄江县| 宁津县| 安平县| 云阳县| 抚松县| 六枝特区| 宁陵县| 开封市| 如皋市| 金阳县| 兴城市| 溆浦县| 思茅市| 克东县| 双牌县| 榕江县| 城固县| 大余县| 兴义市| 临夏县| 瑞安市| 祥云县| 武山县| 广水市| 哈巴河县| 进贤县| 双牌县| 廉江市| 河源市| 大关县|