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

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

?? a.cpp

?? a算法解決八碼難題
?? CPP
字號:
#include<iostream>
#include<stdio.h>
#include<math.h>
#define N 3
#define M 100000

using namespace std;


class jgnode{
public:
	int value[N][N];                 //記錄九宮各位置的值
	int num[2];                      //記錄0的位置
	int h;
	jgnode *pre;                  //指向父輩節點的指針
	jgnode *next;
	jgnode():pre(NULL)            //默認構造函數
	{}

	jgnode(const int v[N][N],jgnode *p=NULL){//構造函數初始化
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				value[i][j]=v[i][j];
		pre=p;
	}
	jgnode(const int v[N][N],jgnode *p=NULL,int n[2]=0){
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				value[i][j]=v[i][j];
		pre=p;
		num[0]=n[0];
		num[1]=n[1];
		h=0;
		next=NULL;
	}

	void setp(jgnode *p){            //設置父輩節點的指針
		pre=p;
	}
	void setv(int *v){               //設置記錄九宮各位置的值
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				value[i][j]=v[i*3+j];
	}
	void setn(int n[2]){num[0]=n[0];num[1]=n[1];}          //設置0的位置
	void print(){                     //輸出九宮
		for(int i=0;i<N;i++){
			for(int j=0;j<N;j++)
				cout<<value[i][j]<<"  ";
			cout<<endl;}
		cout<<endl;
	}
	int isequal(int v[N][N]){
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				if(value[i][j]!=v[i][j])
					return -1;
		return 0;
	}

};

void findzero(int tv[N][N],int tn[2]);
int expand(jgnode *h,jgnode *t,jgnode *g,int gp[9][2]);
int isgnode(jgnode *t,jgnode *g,int tv[N][N]);
int printnode(jgnode *g);
void evalue(jgnode *t,int tv[N][N]);
int expnode(jgnode *h,jgnode *t,int tv[N][N],int tn[2],int gp[9][2]);
int hfunct(int tv[N][N],int gp[9][2]);
void enopen(jgnode *h,jgnode *temp);

int main(){
	int vs[N][N]={1,2,3,4,0,5,6,7,8},vg[N][N]={0,1,2,3,4,5,6,7,8},vt[N][N],tnum[2]={0,0};
/*	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			vg[i][j]=vs[2-i][2-j];*/
	int ecount=1,ocount=0,ccount=0,j=0,temp=0,counter=0;
	char cho='n';
do{
	//ecount記錄open表末端,ocount記錄open表始端,ccount記錄closed表末端
	jgnode *closed[M]={NULL};
	jgnode *snode=NULL,*gnode=NULL,*tnode=NULL,*head=NULL;
	//snode為開時節點,gnode為目標節點,tnode為寄存節點
	cout<<"輸入開始節點(如1,2,3,4,0,5,6,7,8):"<<endl;
	for(int m=0;m<N;m++)
		for(int n=0;n<N;n++)
			cin>>vs[m][n];//scanf("%d",&vs[m][n]);
	int gp[9][2]={{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}};
	findzero(vs,tnum);
	snode=new jgnode(vs,NULL,tnum);
	snode->h=hfunct(vs,gp);
	cout<<snode->h<<endl;
	//cout<<"出入目標節點(如3、1、2、4、0、5、6、7、8):"<<endl;
	//for(m=0;m<N;m++)
	//	for(int n=0;n<N;n++)
	//		cin>>vg[m][n];//scanf("%d",&vg[m][n]);
	gnode=new jgnode(vg,NULL,tnum);
	cout<<"開始節點:"<<endl;
	snode->print();
	cout<<"目標節點:"<<endl;
	gnode->print();
	head=snode;
	cout<<"start:"<<endl;
	if(snode->isequal(vg)==0){
		cout<<"find with th snode."<<endl;
		return 0;
	}
	ecount=expand(head,snode,gnode,gp);
	if(ecount==-1)
		return 0;
	while(j++<M){
		if(head->next==NULL)
			break;
		tnode=head->next;
		head->next=tnode->next;
		evalue(tnode,vt);
		while(closed[counter]!=NULL){
			if(closed[counter++]->isequal(vt)==0){
				temp=1;break;}
		}
		if(temp==0){
		closed[ccount++]=tnode;
		ecount=expand(head,tnode,gnode,gp);
		if(ecount==-1)
			break;
		}
		temp=0;counter=0;
	}
	cout<<"擴展次數為:  "<<j<<endl;
/*	while(head!=NULL){
		cout<<head->h<<endl;
		head->print();
		head=head->next;
	}
	int ccc=0;
	while(closed[ccc]!=NULL){
		cout<<closed[ccc]->h<<endl;
		closed[ccc++]->print();
	}*/
	j=0;
	cout<<"是否繼續下一次搜索(y or n):"<<endl;
	cin>>cho;
	}while((cho=='y')||(cho=='Y'));
	return 0;
}

int printnode(jgnode *g,int c){
	int cc=c;
	if((g->pre)!=NULL)
		cc=printnode(g->pre,c+1);
	g->print();
	return cc;
}
int isgnode(jgnode *t,jgnode *g,int tv[N][N]){
	int count=0;
	if(g->isequal(tv)==0){
		g->pre=t;
		cout<<"find the goal node!!"<<endl;
		cout<<"搜索路徑如下:"<<endl;
		count=printnode(g,count);
		cout<<"路徑長度:"<<count<<endl;
		return -1;
	}
	return 0;
}
int expnode(jgnode *h,jgnode *t,int tv[N][N],int tn[2],int gp[9][2]){
	jgnode *temp;
	if((t->pre)!=NULL){
		if(((t->pre)->isequal(tv))!=0){
			temp=new jgnode(tv,t,tn);
			temp->pre=t;
			temp->h=hfunct(tv,gp);//yaogai
			//cout<<temp->h<<endl;
			//temp->print();
			enopen(h,temp);
			return 1;
		}
		else return 0;
	}
	else{
		temp=new jgnode(tv,t,tn);
		temp->pre=t;
		temp->h=hfunct(tv,gp);//yaogai
		//cout<<temp->h<<endl;
		//temp->print();
		enopen(h,temp);
		return 1;
	}
}
//擴展當前節點,并判斷是否為目標
int expand(jgnode *h,jgnode *t,jgnode *g,int gp[9][2]){
	int td=0,ti,tj,tv[N][N],tn[2],ct=0,flag=0;
	ti=t->num[0];tj=t->num[1];
    if((ti-1)>=0){
		evalue(t,tv);
		tn[0]=ti-1;tn[1]=tj;
		td=tv[ti-1][tj];tv[ti-1][tj]=tv[ti][tj];tv[ti][tj]=td;
		if(isgnode(t,g,tv)==-1)
			return -1;
		expnode(h,t,tv,tn,gp);
	}
    if((tj+1)<=2){
		evalue(t,tv);
		tn[0]=ti;tn[1]=tj+1;
		td=tv[ti][tj+1];tv[ti][tj+1]=tv[ti][tj];tv[ti][tj]=td;
		if(isgnode(t,g,tv)==-1)
			return -1;
		expnode(h,t,tv,tn,gp);
	}
    if((ti+1)<=2){
		evalue(t,tv);
		tn[0]=ti+1;tn[1]=tj;
		td=tv[ti+1][tj];tv[ti+1][tj]=tv[ti][tj];tv[ti][tj]=td;
		if(isgnode(t,g,tv)==-1)
			return -1;
		expnode(h,t,tv,tn,gp);
	}
    if((tj-1)>=0){
		evalue(t,tv);
		tn[0]=ti;tn[1]=tj-1;
		td=tv[ti][tj-1];tv[ti][tj-1]=tv[ti][tj];tv[ti][tj]=td;
		if(isgnode(t,g,tv)==-1)
			return -1;
		expnode(h,t,tv,tn,gp);
	}
	return 0;
}
void evalue(jgnode *t,int tv[N][N]){
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			tv[i][j]=t->value[i][j];
}

int hfunct(int tv[N][N],int gp[9][2]){
	int p=0,s=0;
	int pp[9][2]={{0,1},{0,2},{1,2},{0,0},{1,1},{2,2},{1,0},{2,0},{2,1}};
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			p+=abs(i-gp[(tv[i][j])][0])+abs(j-gp[(tv[i][j])][1]);
			if((i!=1)||(j!=1)){
				if(tv[(pp[i*3+j][0])][(pp[i*3+j][1])]!=((pp[i*3+j][0])*3+pp[i*3+j][1]))
					s+=2;
			}
		}
	}
	if(tv[1][1]!=0)
		s+=1;
	return p+3*s;
}
void enopen(jgnode *h,jgnode *temp){
	jgnode *pt=h->next,*q=h;
	while(pt!=NULL){
		if(temp->h<pt->h){
			temp->next=pt;
			q->next=temp;
			break;
		}
		q=pt;
		pt=pt->next;
	}
	if((pt==NULL)&&(temp->next==NULL))
		q->next=temp;
	//cout<<temp->h<<endl;
	//temp->print();
}

void findzero(int tv[N][N],int tn[2]){
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++){
			if(tv[i][j]==0){tn[0]=i;tn[1]=j;}
		}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩在线观看| 国产精品美女久久久久久久网站| 狠狠色丁香婷综合久久| 国产精品久久久久久久久久免费看 | 久久色在线观看| 欧美午夜电影在线播放| 成人激情文学综合网| 美女视频黄久久| 亚洲成a人v欧美综合天堂| 国产精品久久网站| 欧美精品一区二| 91精品国产品国语在线不卡| 色综合一区二区| 成人国产精品免费网站| 裸体歌舞表演一区二区| 午夜免费久久看| 一区二区三区中文免费| 欧美激情艳妇裸体舞| 欧美大胆一级视频| 欧美二区乱c少妇| 在线观看日韩电影| 色婷婷综合久色| av在线一区二区| 成人黄色一级视频| 国产成人免费在线观看| 韩国女主播成人在线| 天堂一区二区在线| 亚洲国产成人av网| 亚洲一区二区不卡免费| 亚洲一区二区在线免费观看视频| 国产精品电影院| 国产精品久久久久久久久久久免费看| 国产亚洲午夜高清国产拍精品| 精品国产一二三区| 精品人在线二区三区| 精品日韩在线观看| 久久蜜桃av一区二区天堂| 久久一区二区视频| 国产午夜亚洲精品不卡| 久久久噜噜噜久噜久久综合| 久久精品视频在线看| 国产三级久久久| 国产精品女人毛片| 亚洲色图制服诱惑| 一二三四社区欧美黄| 午夜a成v人精品| 久久精品国产999大香线蕉| 另类成人小视频在线| 国产一区二三区好的| 成人激情动漫在线观看| 91麻豆国产精品久久| 在线观看一区二区视频| 欧美网站一区二区| 日韩欧美不卡一区| 国产日韩三级在线| 日韩一区在线看| 亚洲国产综合人成综合网站| 日本视频中文字幕一区二区三区| 青青草精品视频| 国产在线播放一区| jvid福利写真一区二区三区| 色哟哟一区二区| 欧美日本一区二区| 精品免费一区二区三区| 国产欧美日韩精品在线| 一区二区三区日韩精品| 强制捆绑调教一区二区| 国产精品18久久久久久久久| av在线一区二区| 欧美日韩亚洲不卡| 久久精品人人做人人爽人人| 亚洲美女精品一区| 婷婷综合五月天| 国产精品99久久久久久久vr| 色一情一伦一子一伦一区| 91麻豆精品国产91久久久更新时间| 日韩一区二区免费在线观看| 中文字幕乱码久久午夜不卡| 亚洲成av人在线观看| 国产麻豆精品视频| 欧洲人成人精品| 久久精品夜夜夜夜久久| 一区二区三区日本| 国产剧情在线观看一区二区| 在线欧美日韩精品| 欧美精品一区二区三区四区| 悠悠色在线精品| 国产成人免费视频一区| 欧美另类高清zo欧美| 欧美国产97人人爽人人喊| 天天做天天摸天天爽国产一区 | 色综合久久久久综合| 日韩一级完整毛片| 伊人夜夜躁av伊人久久| 国产真实乱子伦精品视频| 在线观看日韩电影| 亚洲国产成人在线| 另类人妖一区二区av| 91传媒视频在线播放| 国产亚洲欧美中文| 日本亚洲视频在线| 色国产综合视频| 欧美国产1区2区| 精品一区二区三区免费观看| 色香蕉久久蜜桃| 国产欧美一二三区| 麻豆91在线看| 欧美视频三区在线播放| 亚洲区小说区图片区qvod| 国产黄色精品视频| 精品国产一区二区三区久久久蜜月| 亚洲国产一区二区视频| 色香蕉久久蜜桃| 亚洲日韩欧美一区二区在线| 国产精品一级片| 精品国产在天天线2019| 蜜桃视频在线一区| 欧美日韩高清影院| 亚洲成人精品在线观看| 在线观看精品一区| 一区二区三区在线观看动漫| 97精品久久久久中文字幕| 国产精品女上位| 国产成人免费9x9x人网站视频| 日韩三级中文字幕| 午夜a成v人精品| 69av一区二区三区| 日本人妖一区二区| 欧美一区二区啪啪| 日日夜夜免费精品视频| 欧美丰满少妇xxxbbb| 日韩黄色片在线观看| 欧美日韩精品一二三区| 婷婷成人综合网| 5566中文字幕一区二区电影| 天天亚洲美女在线视频| 884aa四虎影成人精品一区| 日韩精品色哟哟| 精品久久人人做人人爽| 狠狠色丁香婷婷综合| 国产片一区二区| 成人黄色软件下载| 亚洲男同性恋视频| 欧美视频精品在线| 三级久久三级久久久| 精品嫩草影院久久| 国产在线播放一区二区三区| 亚洲国产岛国毛片在线| av在线不卡电影| 亚洲欧美韩国综合色| 在线观看免费成人| 日本特黄久久久高潮| 久久综合色一综合色88| 国产成人自拍高清视频在线免费播放| 国产亚洲一区二区三区| www.久久久久久久久| 亚洲第四色夜色| 精品日韩在线观看| www.亚洲国产| 午夜精品久久一牛影视| 日韩免费观看高清完整版 | 久久色在线观看| 99久久精品国产毛片| 欧美性xxxxxxxx| 污片在线观看一区二区| 日韩欧美三级在线| 国产成人综合亚洲网站| 亚洲欧洲国产专区| 欧美精品一二三四| 国产成人精品影视| 亚洲一区二区3| 精品成人一区二区三区| 成人网页在线观看| 日韩激情av在线| 国产精品午夜免费| 91精品在线一区二区| 国产成人精品免费| 亚洲午夜久久久久久久久电影院| 日韩欧美一区中文| 97久久超碰国产精品| 久久国产精品一区二区| 亚洲乱码国产乱码精品精98午夜 | av资源网一区| 麻豆精品视频在线观看免费| 中文字幕永久在线不卡| 日韩美女视频在线| 色天使久久综合网天天| 国产精品69毛片高清亚洲| 亚洲国产精品自拍| 国产精品久久久久久久久免费桃花| 7777女厕盗摄久久久| 色综合久久六月婷婷中文字幕| 久国产精品韩国三级视频| 一片黄亚洲嫩模| 国产精品丝袜在线| 日韩一区二区三区四区| 欧美天天综合网| 99久久免费精品| 国产一区二区导航在线播放| 日韩中文欧美在线|