亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eightnumberview.cpp

?? 人工智能中的八數碼難題,人工智能中的八數碼難題
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// EightNumberView.cpp : implementation of the CEightNumberView class
//

#include "stdafx.h"
#include "EightNumber.h"

#include "EightNumberDoc.h"
#include "EightNumberView.h"

#include "ExplainGame.h"
#include "EditDlg.h"
#include "MainFrm.h"
//#include "AboutDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int di[4]={0,-1,1,0};
int dj[4]={-1,0,0,1};
//int zeroi,zeroj;
/////////////////////////////////////////////////////////////////////////////
// CEightNumberView
UINT MultiThread(LPVOID param);

IMPLEMENT_DYNCREATE(CEightNumberView, CFormView)

BEGIN_MESSAGE_MAP(CEightNumberView, CFormView)
	//{{AFX_MSG_MAP(CEightNumberView)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BUTTON_STEPRUN, OnButtonSteprun)
	ON_BN_CLICKED(IDC_BUTTON_RUN, OnButtonRun)
	ON_WM_TIMER()
	ON_WM_CANCELMODE()
	ON_BN_CLICKED(IDC_BUTTON_ONOK, OnButtonOnok)
	ON_WM_LBUTTONDOWN()
	ON_WM_KEYDOWN()
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
	ON_BN_CLICKED(IDC_BUTTON_EXPLAIN, OnButtonExplain)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEightNumberView construction/destruction

CEightNumberView::CEightNumberView()
	: CFormView(CEightNumberView::IDD)
{
	//{{AFX_DATA_INIT(CEightNumberView)
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	start[0][0]=2;
	start[0][1]=8;
	start[0][2]=3;
	start[1][0]=1;
	start[1][1]=0;
    start[1][2]=4;
	start[2][0]=7;
	start[2][1]=6;
	start[2][2]=5;



    goal[0][0]=1;
	goal[0][1]=2;
	goal[0][2]=3;
	goal[1][0]=8;
	goal[1][1]=0;
	goal[1][2]=4;
	goal[2][0]=7;
	goal[2][1]=6;
	goal[2][2]=5;
	
	
	

	//totalcount=0;
	
	cellwidth=160;
	cellheight=160;
    ni=1;
	nj=1;
    depth=0;
	//open=1;
	//closed=0;
//	k=0;
	count=-1;
    AutoPlay=false;

	for (int i=0; i<3; i++)
		for (int j=0; j<3; j++)
		{
			zerosite.ch[i][j]=start[i][j];
			if (start[i][j]==0)
			{
             zerosite.si=i;
			 zerosite.sj=j;
			}
		}
     	
   m_pThread=NULL;
}

CEightNumberView::~CEightNumberView()
{
	//DeleteObject(bitmap);
	//for (int i=0; i<3; i++)
     //for (int j=0; j<3; j++)
         DeleteObject(bitmap);
		// DeleteObject(map);

}

void CEightNumberView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEightNumberView)
	DDX_Control(pDX, IDC_BUTTON_EXPLAIN, m_Explain);
	DDX_Control(pDX, IDC_STATIC_SHOWSTATE, m_ShowState);
	DDX_Control(pDX, IDC_BUTTON_START, m_Start);
	DDX_Control(pDX, IDC_BUTTON_ONOK, m_OnOK);
	DDX_Control(pDX, IDC_BUTTON_STEPRUN, m_SepRun);
	DDX_Control(pDX, IDC_BUTTON_RUN, m_RunToStop);
	//}}AFX_DATA_MAP
}

BOOL CEightNumberView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CEightNumberView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
    //GetRand();
   
	//m_pThread=AfxBeginThread(MultiThread,0);
	Run();
    if (ftot)
	{
     m_SepRun.EnableWindow(TRUE);
	 m_RunToStop.EnableWindow(TRUE);
     m_ShowState.SetWindowText(String);
	}
     else
	 {
       m_SepRun.EnableWindow(FALSE);
	   m_RunToStop.EnableWindow(FALSE);
	   m_ShowState.SetWindowText("初始化失敗!非常遺憾此狀態無解\n\n   禁止使用自動運行和單步運行\n\n      只能使用鼠標或鍵盤方向鍵移動");
	 }
   
    //m_ShowState.EnableWindow(FALSE);
}

void CEightNumberView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	AfxGetMainWnd()->SetWindowText("八數碼游戲[作者:李少輝]");
	// TODO: Add your message handler code here
      //ItoBitmap();
	  //DrawStation();
	  /*for (int i=0;i<3; i++)
		  for (int j=0; j<3; j++)
		  {
             temp.si=i;
			 temp.sj=j;
			 drawd(temp,1);
		  }*/
	int i,j;
	  for (i=0; i<3; i++)
		  for ( j=0; j<3; j++)
		  {
			  drawd(i,j,start[j][i]);
		  }
	  DrawGraphics();
	  DrawStoA();

	  //目標狀態
    CPen newPen,*oldPen;
	newPen.CreatePen(PS_SOLID,3,RGB(128,0,0));
	oldPen=dc.SelectObject(&newPen); 
	for(i=0;i<=3;i++)
	{
		dc.MoveTo(540+240,40+40*i);
		dc.LineTo(540+360,40+40*i);
	}
	for(j=0;j<=3;j++)
	{
		dc.MoveTo(540+240+40*j,40);
		dc.LineTo(540+240+40*j,160);
	}
	CFont newFont,*oldFont;
	newFont.CreateFont(20,20,0,0,700,FALSE,FALSE,FALSE,ANSI_CHARSET,
		OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY,FF_ROMAN,"Times New Roman");
	oldFont=dc.SelectObject(&newFont);
	dc.SetBkColor(RGB(212,208,200));
	CString str;
	//顯示目標狀態
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
		{
			str.Format("%i",goal[i][j]);
			dc.TextOut(540+240+40*j+10,40+40*i+10,str);
			
		}
	newPen.DeleteObject();
	newFont.DeleteObject();
	dc.SelectObject(oldPen);
	dc.SelectObject(oldFont);
	// Do not call CFormView::OnPaint() for painting messages
}

/////////////////////////////////////////////////////////////////////////////
// CEightNumberView printing

BOOL CEightNumberView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CEightNumberView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CEightNumberView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CEightNumberView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CEightNumberView diagnostics

#ifdef _DEBUG
void CEightNumberView::AssertValid() const
{
	CFormView::AssertValid();
}

void CEightNumberView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CEightNumberDoc* CEightNumberView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEightNumberDoc)));
	return (CEightNumberDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEightNumberView message handlers

BOOL CEightNumberView::Dupe(struct record a, struct record b)//檢查是否與已有狀態重復
{
   BOOL buf=TRUE;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			if(a.ch[i][j]!=b.ch[i][j])
				buf=FALSE;
	return buf;
}

BOOL CEightNumberView::Check(int k)//檢查空格向第k個方向移動是否出棋盤
{
    BOOL check;
	newnode.ni=temp.si+di[k];
	newnode.nj=temp.sj+dj[k];
	if(newnode.ni>=0 && newnode.ni<=2 && newnode.nj>=0 && newnode.nj<=2)
		check=TRUE;
	else
	{
		check=FALSE;
		newnode.ni=newnode.ni-di[k];
		newnode.nj=newnode.nj-dj[k];
	}
	return check;
}

BOOL CEightNumberView::Goals(struct record g)//檢查是否為目標
{
	BOOL gl=TRUE;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
		{
			if(g.ch[i][j]!=goal[i][j])
				gl=FALSE;
		}
	return gl;

}

void CEightNumberView::Run()
{
    int preopen;
	m_SepRun.EnableWindow(FALSE);
	m_RunToStop.EnableWindow(FALSE);
	//String=""; 
	open=1;
	closed=0;
	CString str;
	BOOL tt=TRUE;
	ftot=false;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			data[1].ch[i][j]=start[i][j];
	data[1].si=ni;
	data[1].sj=nj;
//	CString ss;
//	ss.Format("%i",data[1].si);
//	MessageBox(ss);
	data[1].pnt=0;
	data[1].dep=0;
	while(open>closed && tt && open<100000)
	{
		closed=closed+1;   //出隊一個元素
		temp=data[closed];
		depth=temp.dep;
		newnode=temp;
		for(k=0;k<=3;k++)
		{
			if(Check(k))
			{
				open=open+1;
				data[open]=newnode;
				//原空格賦新位置的值,新空格置為零
				data[open].ch[ data[open].si ][ data[open].sj ]=data[open].ch[ data[open].ni ][ data[open].nj ];
				data[open].ch[ data[open].ni ][ data[open].nj ]=0;
				//新空格的位置賦給原空格
				data[open].si=data[open].ni;
				data[open].sj=data[open].nj;

				data[open].pnt=closed;
				data[open].dep=depth+1;
			}
            /*if (open>10000)
			{
				MessageBox("內存不足,或本組數據不能夠到達目標狀態\n\n     可以使用鼠標進行移動\n\n  要重新開始,請單擊‘開始游戲’","初始化失敗",MB_OK|MB_ICONINFORMATION);
				//MessageBox("恭喜你,你已贏得這局,’","八數碼游戲",MB_OK|MB_ICONINFORMATION);
				exit(1);
				//continue;
				//goto failed;
			}*/
			preopen=open-1;
			struct record temnode;
			temnode=data[open];
			for(i=1;i<=preopen;i++)
			{
				if(Dupe(temnode,data[i]))
					open=open-1;

			}
			//ShowStatus(data[open-1].ch);
			if(Goals(data[open]))
			{
				tt=FALSE;
                ftot=true;
			}
			if(tt==FALSE)
				break;
		}
//failed: break;
	}
    
	if(tt==FALSE && open<100000)
	{
		//記下深度
		depth=data[open].dep;
		//把直接移動的狀態用output數組記下來
		struct record temnode;
		int temi,temdepth;
		temdepth=depth;
		temnode=data[open];
		output[0]=data[1];
		output[temdepth]=data[open];
		while(temnode.pnt!=1)
		{
			temi=temnode.pnt;
			output[--temdepth]=data[temi];
			temnode=data[temi];
		}
		//output數組賦值完畢

		//使單步運行按鈕有效
		//m_cButtonStepRun.EnableWindow(TRUE);

		//輸出提示信息
		CString count;
		count.Format("%i",open-1);
		//CString std;
	    //std.Format("%d",open);
	    //MessageBox(std);
		//MessageBox("    運行成功!\n\n共產生"+count+"個狀態(包括目標狀態,但不包括初始狀態)");
		String="      初始化成功!\n\n    共產生"+count+"個狀態\n\n可以使用自動運行和單步運行\n\n也可以使用鼠標或鍵盤方向鍵進行移動\n\n";
	}
  //else
	 //MessageBox("Failed!");
	if (open>=100000 && tt==TRUE)
	{
     //CString std;
	 //std.Format("%d",open);
	 //MessageBox(std);
	 MessageBox("內存不足,或本組數據不能夠到達目標狀態\n\n     可以使用鼠標或鍵盤方向鍵進行移動\n\n  要重新開始,請單擊‘開始游戲’","初始化失敗",MB_OK|MB_ICONINFORMATION);
				//MessageBox("恭喜你,你已贏得這局,’","八數碼游戲",MB_OK|MB_ICONINFORMATION);
				//exit(1);
				//continue;
				//goto failed;
	  ftot=false;
	}
	

  
}

void CEightNumberView::DrawGraphics()
{
    int i;
	CDC *pDC=GetDC();
	for(i=0;i<=3;i++)
	{
		pDC->MoveTo(i*160+20,20);
		pDC->LineTo(i*160+20,480+20);
	}
	for(i=0;i<=3;i++)
	{
		pDC->MoveTo(20,i*160+20);
		pDC->LineTo(480+20,i*160+20);
	}
	pDC->DeleteDC();
	return;
}

void CEightNumberView::GetRand()
{
   srand(time(NULL));
   int aa[9];
   int i,j;
   //&start[0][0]=aa;
   CString str,string="",st;
//   int dat;
  // aa[0]=rand()%9;
     for (i=0; i<9;i++)
	 {
		 aa[i]=rand()%9;
		 for(j=0; j<i;j++)
		 {
			 if (aa[i]==aa[j])
			 {
               
			  do
			  {

				aa[i]=rand()%9;
				
			  } while (aa[i]==aa[j]);
            
			 }
			
		 }
		 //str.Format("%d",aa[i]);
		//	MessageBox(str);
	
	 }
   st="012345678";
   int ab[9];
   int a,t;
   for (i=0; i<9; i++)
	   ab[i]=11;
   for (j=1; j<10; j++)
   {
	   a=0;
	   t=atoi(substr(st,j,1));
	   for (i=0; i<9; i++)
	   {
		   //t=atoi(substr(st,j,1));
		   if (t==aa[i])
		   {
			   a=a+1;
		       if (a>1)
			    aa[i]=9;
		   }
	   }
	   if (a==0)
	   {
			   //aa[i]=10;
			   ab[j-1]=t;
	   }
	   
	   //str.Format("%d",aa[i]);
	   //MessageBox(str);
   }
   /*CString std="";
   for (i=0; i<9; i++)
   {
	   str.Format("%d",aa[i]);
	   std=std+"  "+str; 
   }
   MessageBox(std);
for (i=0; i<9; i++)
   {
	   str.Format("%d",ab[i]);
	   std=std+"  "+str; 
   }
   MessageBox(std);*/
   for (i=0; i<9; i++)
   {
	   if (aa[i]==9)
	   {
		   for (j=0; j<9; j++)
		   {
			   if (ab[j]!=11)
			   {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区免费观看| 欧美mv和日韩mv的网站| 精品免费国产一区二区三区四区| 一区二区三区电影在线播| 粉嫩aⅴ一区二区三区四区五区 | 首页亚洲欧美制服丝腿| 91视视频在线观看入口直接观看www| 国产午夜精品一区二区 | 日韩精品一区二区三区在线 | 亚洲精品一卡二卡| 欧美午夜电影网| 中文字幕一区av| 不卡影院免费观看| 亚洲激情图片qvod| 欧美日韩在线观看一区二区 | 日韩精品一区二区三区三区免费| 免费的成人av| 国产欧美日韩另类一区| 日韩一区二区三区四区| 久久99国产精品尤物| 久久久国际精品| 91最新地址在线播放| 一区二区三区蜜桃网| 日韩一区二区三区视频在线观看 | 国产一区二区在线视频| 久久亚洲综合色| 99久久精品费精品国产一区二区| 国产精品成人在线观看| 秋霞影院一区二区| 欧美日韩国产大片| 在线精品观看国产| 久久亚洲一区二区三区明星换脸| 国产一区二区视频在线播放| 国产精品素人视频| 欧美日韩在线播| 国产精品911| 亚洲综合一区在线| 久久久综合视频| 91激情五月电影| 免费成人性网站| 综合电影一区二区三区 | 91麻豆精品国产91久久久资源速度 | 欧美成人精品二区三区99精品| 国产成人欧美日韩在线电影| 国产大陆a不卡| 国产欧美精品一区| 欧美久久久久中文字幕| 国产风韵犹存在线视精品| 亚洲成人一二三| 国产精品色哟哟网站| 欧美一区二区三区喷汁尤物| 北条麻妃一区二区三区| 天堂蜜桃一区二区三区| 成人欧美一区二区三区视频网页| 日韩一区二区在线观看视频播放| 一本在线高清不卡dvd| 国产一区二区久久| 日韩电影一二三区| 亚洲伊人色欲综合网| 国产精品麻豆一区二区| 日韩精品一区二区在线| 欧美精品自拍偷拍| 日本国产一区二区| 成人午夜视频免费看| 狠狠色狠狠色综合系列| 日韩黄色免费电影| 亚洲大片免费看| 国产精品久线观看视频| 国产欧美一区二区在线观看| 日韩亚洲欧美一区| 日韩欧美综合在线| 91精品欧美一区二区三区综合在| 91久久精品日日躁夜夜躁欧美| 国产精品亚洲视频| 激情小说欧美图片| 捆绑调教美女网站视频一区| 日本vs亚洲vs韩国一区三区 | 午夜精品久久久久久久久| 亚洲欧美一区二区三区孕妇| 国产精品你懂的在线欣赏| 久久精品一区二区三区四区| 久久综合狠狠综合久久综合88 | 精品国产精品网麻豆系列| 日韩一区二区三| 91精品国产一区二区三区香蕉| 欧美视频三区在线播放| 欧美日韩精品一区二区三区| 欧美一区二区三区四区视频| 91精品国产综合久久久蜜臀粉嫩| 欧美性一区二区| 欧美日韩国产a| 欧美调教femdomvk| 91麻豆免费视频| 99精品视频在线观看免费| 成人黄色大片在线观看| 国产精品亚洲人在线观看| 全国精品久久少妇| 韩国精品在线观看| 国产成人免费视频网站| 99久久精品免费| 欧洲国产伦久久久久久久| 欧美日韩在线精品一区二区三区激情| 欧美日韩你懂得| 91精品国产欧美一区二区成人| 欧美精品久久99| 久久综合九色综合欧美98| 欧美激情在线看| 国产亚洲一二三区| 国产精品美女久久久久久2018| 久久精品欧美一区二区三区麻豆 | 亚洲综合在线视频| 一区二区三区久久| 香蕉乱码成人久久天堂爱免费| 亚洲国产精品尤物yw在线观看| 秋霞国产午夜精品免费视频| 国产精品2024| 欧美在线色视频| 精品三级在线看| 国产精品久久久久婷婷二区次| 亚洲精品福利视频网站| 亚洲精品你懂的| 丝袜亚洲另类丝袜在线| 久久国产视频网| 极品销魂美女一区二区三区| 国产白丝精品91爽爽久久| 在线观看免费亚洲| 在线综合视频播放| 久久亚洲综合色一区二区三区| 国产精品久久久久久久久免费樱桃| 亚洲精品一二三四区| 偷偷要91色婷婷| 蜜桃91丨九色丨蝌蚪91桃色| 国产xxx精品视频大全| 在线观看av不卡| 久久久亚洲高清| 久久精品日产第一区二区三区高清版 | 91视频免费观看| 欧美一区二区三区免费观看视频 | 成人免费观看av| 色又黄又爽网站www久久| 日韩欧美国产一区二区在线播放| 亚洲国产精品v| 亚洲不卡av一区二区三区| 奇米精品一区二区三区在线观看一 | 成人精品亚洲人成在线| 99久久国产综合精品女不卡| 欧美日韩一区中文字幕| 中文字幕欧美国产| 久草热8精品视频在线观看| 色悠悠久久综合| 国产亚洲一区二区三区四区| 亚洲成人av在线电影| 99久久国产综合色|国产精品| 日韩精品一区二区三区视频| 亚洲午夜一区二区| 成人永久看片免费视频天堂| 日韩欧美在线影院| 日韩毛片在线免费观看| 蜜臀av一区二区| 欧美精品日韩一区| 亚洲欧美成人一区二区三区| 国产99久久久久久免费看农村| 日韩欧美色综合网站| 亚洲成人av中文| 国产成人在线色| 欧美视频自拍偷拍| 欧美极品aⅴ影院| 婷婷丁香激情综合| 欧美亚洲一区三区| 成人欧美一区二区三区| 不卡一二三区首页| 日韩精品在线网站| 国产精品高潮久久久久无| 国产福利一区二区三区视频在线| 日韩三级在线免费观看| 日韩电影在线一区二区| 7777精品久久久大香线蕉| 亚洲精品国产品国语在线app| 99久久久久久| 国产精品国产自产拍高清av| 国产一区二区按摩在线观看| 日韩免费观看高清完整版| 日韩激情av在线| 欧美电视剧在线观看完整版| 精品毛片乱码1区2区3区| 精品播放一区二区| 美女视频一区在线观看| 91.com视频| 蜜桃视频一区二区三区在线观看| 欧美一区二区三区播放老司机| 日本v片在线高清不卡在线观看| 日韩欧美亚洲另类制服综合在线| 看电影不卡的网站| 久久这里只有精品6| 国产成人免费xxxxxxxx| 国产精品久久综合| 91麻豆免费看片| 秋霞国产午夜精品免费视频| 欧美精品一区二区高清在线观看| 国产91综合一区在线观看|