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

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

?? sat.c

?? 用并行算法解決18皇后問題
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* FILE : sat.c*/#include <stdio.h>#include <stdlib.h>/*包含有關時間的函數*/#include <time.h>  /*mpi庫函數*/#include "mpi.h"  #include <math.h>/*變量數目*/#define NVARS 		100/*子句數目*/#define NCLAUSES 	3/*每條子句的長度*/#define LENGTH_CLAUSE 	3/*fgets一行最多讀入的字符數*/#define	MAXLINE		60#define	TRUE		1#define	FALSE		0/*既不是可滿足的也不是不可滿足的*/#define	UNCERTAIN	-1/*變量值為空*/#define	NOVALUE		-1#define	DEPTH		5/*計算pow(x,y)*/int Pow(int x, int y);#define	COUNT		Pow(2,DEPTH)#define	TASKTAG		11 /**************/ /*主要數據結構*//**************//*變量*/struct VARIABLE{/*變量真值為1,假值為0,無值為-1*/	int value;};/*文字*/struct LITERAL{	/*取值為VAR,-VAR和NOVALUE *//* VAR取值從1到NVARS*/	int value;};/*子句*/struct CLAUSE{	struct LITERAL lit[LENGTH_CLAUSE];	int num_unassigned;	/*被滿足狀態取值TRUE,FALSE或UNCERTAIN */int state_of_satisfied;};/*合取范式*/struct CNF{	struct VARIABLE var[NVARS];	struct CLAUSE clause[NCLAUSES];	int num_uncertain;	/*結果取值為TRUE,FALSE或UNCERTAIN*/	int result;};/************//*進一步定義*//************//*測試一個子句是否可滿足*/int DavisPutnam();/*當賦予一個新值時更新結構CNF*/void UpdateCNF();/*檢查該CNF是否只有單一字句*/int HasUnitClause();/*檢查該CNF是否有純文字*/int HasPureLiteral();/*從輸入文件讀數據初始化CNF*/void InitCNF();/*從失敗記號恢復CNF*/void Reverse();/*返回一個整數的絕對值*/int Abs();/*將CNF打包到一個整數緩沖*/void PackCNF();/*將一個整數緩沖釋放到一個CNF*/void UnpackCNF();/*根據任務更新該CNF*/void SetValue(); /*從X中取得n位*/unsigned GetBits(); /*從根接收任務然后計算并會送結果*/void SlaveWork();/*從CNF中選變量*/void PickVars();/*檢查變量是否在緩沖中*/int NotInBuf(); /*主函數*/int main(int argc,char ** argv)  {   	struct CNF  Cnf;  /*合取范式CNF*/	int length=2+NVARS+NCLAUSES*(2+LENGTH_CLAUSE)+1;  	/*緩沖區長度*/	int buf[length];  /*LENGHT_CLAUSE*NCLAUSE緩沖區*/	MPI_Status status;  /*MPI--狀態*/	int i,j,myrank,size,BufResult;	char* CnfFile;  /*輸入CNF文件名*/	FILE * in;  /*處理文件*/	MPI_Init(&argc,&argv);  /*MPI--初始化*/	MPI_Comm_rank(MPI_COMM_WORLD,&myrank);  /*MPI--次第號*/	MPI_Comm_size(MPI_COMM_WORLD,&size);  /*MPI--數目*/	/*root processor read data and initiate Cnf,then pack it to buff*/	if(myrank==0)  /*進程0(主進程)*/	{		if (argc<2)  /*保證有兩個參數*/		{			printf("You forgot to enter a parametes!\n");  /*參數數目不對*/			MPI_Abort(MPI_COMM_WORLD,99);  /*MPI--退出*/		}		CnfFile=argv[1];  /*讀取CNF文件名*/		if ((in=fopen(CnfFile,"rt"))==NULL)	/*read file*/		{			printf("cannot open the result file\n");  /*文件不存在或沒有相應的屬性*/			MPI_Abort(MPI_COMM_WORLD,99);  /*MPI--退出 */		}		if(myrank==0) printf("NVARS=%d NCLAUSES=%d LENGTH_CLAUSE=%d\n",NVARS,NCLAUSES,LENGTH_CLAUSE);		InitCNF(&Cnf,in);  /*從輸入文件中讀取數據并初始化CNF*/				PackCNF(Cnf,buf);  /*將CNF打包到整型緩沖--便于MPI廣播*/	}	/*broadcast buf to all the processors*/	MPI_Barrier(MPI_COMM_WORLD);	MPI_Bcast(buf,length,MPI_INT,0,MPI_COMM_WORLD);  /*MPI--廣播CNF包*/	MPI_Barrier(MPI_COMM_WORLD);		/*if it is root processor,distribute the task and wait result from slaves*/	if ( myrank == 0)  /*進程0(主進程)*/	{		double start,end;		start=MPI_Wtime();  /*MPI--時間(開始時間)*/		/*send the first bulk of task*/		for(i=0;i<size-1;i++)  /*對每一個從進程都發送消息*/			MPI_Send(&i,1,MPI_INT,i+1,TASKTAG,MPI_COMM_WORLD);  /*發送CNF信息到從進程*/		while (1)  /*一直執行*/		{	             			MPI_Recv(&BufResult,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);  /*從從進程接收結果*/			if ( BufResult==TRUE )  /*SAT算法成功 */			{				end=MPI_Wtime();  /*MPI--時間(結束時間)*/				i=COUNT+10;				printf("\nSatisfied! time%f\n",end-start);  /*運行時間*/				/*send i as the end signal*/				for(j=0;j<size-1;j++)				    MPI_Send(&i,1,MPI_INT,j+1,TASKTAG,MPI_COMM_WORLD);  /*向從進程發送終止信號*/				break;  /*退出執行*/			}			else if(i>COUNT)  /*SAT算法超出規模*/				{					printf("\nUnsatisfied!\n");  /*SAT算法失敗*/					/*send i as the terminal signal*/					for(j=0;j<size-1;j++)						MPI_Send(&i,1,MPI_INT,j+1,TASKTAG,MPI_COMM_WORLD);  /*向從進程發送終止信號*/					break;  /*退出執行*/				}			else			{				int dest=status.MPI_SOURCE;  /*確定消息發送目的地*/				MPI_Send(&i,1,MPI_INT,dest,TASKTAG,MPI_COMM_WORLD);  /*向從進程發送相應CNF包*/				i++;  /*下一步操作*/			}		}	}	else  /*其它進程(從進程)*/	{		unsigned	BufTask;  /*任務數*/		UnpackCNF(&Cnf,buf);  /*將緩沖中的CNF解包*/		while(1)  /*一直執行*/		{		MPI_Recv(&BufTask,1,MPI_INT,0,TASKTAG,MPI_COMM_WORLD,&status);  /*從進程0接受CNF包信息*/			if ( BufTask <= COUNT)  /*未越界*/				SlaveWork(Cnf,BufTask,&BufResult);  /*從0進程接受任務,計算,將結果返回0進程*/			else break;  /*其它情況*/		}	}	MPI_Finalize();  /*MPI--結束*/	return(0);}/******************************************/ /*該函數從輸入文件讀入CNF數據并給Cnf賦值輸入:in一包含CNF數據的文件輸出:pCnf一個指向Cnf結構的指針*/ /******************************************/ void InitCNF(struct CNF * pCnf,FILE* in)  /*從輸入文件中讀取數據并初始化CNF(參數:CNF式指針,處理文件)*/{	char prestr[MAXLINE];  /*文件緩存字符數組*/	int i,j,temp;	for(i=0;i<NVARS;i++)  /*在給定的變量數目范圍(100)內*/		pCnf->var[i].value=UNCERTAIN;  /*給CNF式變量賦初值(-1)*/	for (i=0;i<NCLAUSES;i++) {  /*在給定的子句數目范圍(350)內*/		for (j=0;j<LENGTH_CLAUSE;j++) {  /*在給定的子句長度范圍(3)內*/			fscanf(in,"%d",&pCnf->clause[i].lit[j].value);  /*給CNF式文字賦初值*/			/* printf("%d ",&ilauses[c].lit[l]); */		}		fscanf(in,"%d",&temp);  /*其它讀入的值存入臨時變量中*/		/* printf("%d \n",temp); */		pCnf->clause[i].num_unassigned=LENGTH_CLAUSE;  /*子句中未賦值數取為子句長度*/		pCnf->clause[i].state_of_satisfied=UNCERTAIN;  /*子句狀態取為不確定(-1)*/	}	pCnf->num_uncertain=NVARS;  /*CNF中未賦值數取為變量最大數目(100)*/	pCnf->result=UNCERTAIN;  /*CNF結果取為不確定(-1)*/	fclose(in);  /*關閉處理文件*/}/******************************************/ /*該函數計算結果是最主要的函數輸入:Cnf一個CNF結構輸出:DavisPutnam取值TRUE或FALSE*/ /******************************************/ int DavisPutnam(struct CNF  Cnf)  /*測試子句是否為SAT(參數:CNF式)*/{	int Serial;/*number of the var to be signed*/  /*待賦值的變量數*/	/*test if this Cnf has had the result*/	if (Cnf.result==TRUE) return TRUE;  /*如果CNF的一部分的結果取為真,返回真*/	if (Cnf.result==FALSE) return FALSE;  /*如果CNF的一部分的結果取為假,返回假*/	/*test if Cnf has unit clause*/	if (HasUnitClause(Cnf,&Serial)==TRUE )  /*CNF含有單子句*/	{		Cnf.var[Abs(Serial)].value=(Serial>0)?TRUE:FALSE;  /*CNF變量賦值(0或1)*/		printf("\nsingle%d",Serial);		UpdateCNF(&Cnf,Abs(Serial));  /*為變量賦新值時更新CNF*/		if (Cnf.result==TRUE) return TRUE;  /*如果CNF的一部分的結果取為真,返回真*/		if (Cnf.result==FALSE) return FALSE;  /*如果CNF的一部分的結果取為假,返回假*/		if (DavisPutnam(Cnf)==TRUE) return TRUE;  /*如果CNF的一部分測試子句后的結果取為真,返回真*/		else return FALSE;  /*其它情況,返回假*/	}	/*test if Cnf has pure literal*/	else if (HasPureLiteral(Cnf,&Serial)==TRUE )  /*CNF含有純文字*/		{	        Cnf.var[Serial].value=TRUE;  /*CNF變量賦值為真(1)*/			printf("\nPure %d",Serial);			UpdateCNF(&Cnf,Serial);  /*為變量賦新值時更新CNF*/			if (Cnf.result==TRUE) return TRUE;  /*如果CNF的一部分的結果取為真,返回真*/			if (Cnf.result==FALSE) return FALSE;  /*如果CNF的一部分的結果取為假,返回假*/			if (DavisPutnam(Cnf)==TRUE) return TRUE;  /*如果CNF的一部分測試子句后的結果取為真,返回真*/			else return FALSE;  /*其它情況,返回假*/		}		/*pick a var without value*/	     else  /*CNF不只含有單個文字且不含有純文字*/		 {			for(Serial=0;Serial<NVARS;Serial++)  /*在給定的變量數目范圍(100)內*/				if (Cnf.var[Serial].value==NOVALUE)  break;  /*CNF式中變量沒有值,退出*/			printf("\ncommon%d",Serial);			/*first assume this var is TRUE*/			Cnf.var[Serial].value=TRUE;  /*CNF變量賦值為真(1)*/			UpdateCNF(&Cnf,Serial);  /*為變量賦新值時更新CNF*/			if (Cnf.result==TRUE) return TRUE;  /*CNF式中變量值為真(1),返回真(1)*/			else if (Cnf.result==UNCERTAIN)  /*CNF式中變量值不確定*/				if (DavisPutnam(Cnf)==TRUE) return TRUE;  /*如果CNF的一部分測試子句后的結果取為真,返回真*/			/*Else try that #Serial is FALSE*/			Cnf.var[Serial].value=FALSE;  /*CNF變量賦值為真(1)*/			/*update Cnf when #Serial is FALSE*/			Reverse(&Cnf,Serial);  /*將CNF從失敗信號中恢復出來*/			if (Cnf.result==TRUE) return TRUE;  /*如果CNF的一部分的結果取為真,返回真*/			if (Cnf.result==FALSE) 	return FALSE;  /*如果CNF的一部分的結果取為假,返回假*/			if (DavisPutnam(Cnf)==TRUE) return TRUE;  /*如果CNF的一部分測試子句后的結果取為真,返回真*/ 			return FALSE;  /*其它情況,返回假(0)*/		 }}/******************************************/ /*該函數檢查Cnf是否有單元字句輸入:Cnf一個CNF結構,Serial變量的編號輸出:HasUnitClause取值為TRUE或FALSE*/ /******************************************/ int HasUnitClause(struct CNF  Cnf,int *Serial)  /*測試CNF是否含有單子句(參數:CNF式,指向變量的指針)*/{	int i,j,k;	for (i=0;i<NCLAUSES;i++)  /*在給定的子句數目范圍(350)內*/		if (Cnf.clause[i].num_unassigned==1)  /*子句中未賦值數為1*/		{			for(j=0;j<LENGTH_CLAUSE;j++)  /*在給定的子句長度范圍(3)內*/			{				k=Cnf.clause[i].lit[j].value;  /*k暫時存放子句中相應的文字的值*/				if (Cnf.var[Abs(k)].value==NOVALUE)  /*CNF中相應變量沒有值*/				{					*Serial=k;  /*相應變量賦值*/					return TRUE;  /*返回真(1)*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
zzijzzij亚洲日本少妇熟睡| 狠狠色综合播放一区二区| 亚洲国产精品精华液ab| 日韩精品一区二区三区中文精品| 欧美日韩情趣电影| 欧美精品在线一区二区三区| 欧美欧美欧美欧美首页| 欧美日本一道本在线视频| 日韩视频在线你懂得| 日韩精品在线一区| 精品国产电影一区二区| 2024国产精品| 久久久另类综合| 亚洲欧美日韩国产综合| 亚洲在线视频免费观看| 婷婷久久综合九色国产成人| 精品一区二区三区免费毛片爱| 国产麻豆精品视频| 99天天综合性| 6080国产精品一区二区| 2014亚洲片线观看视频免费| 成人欧美一区二区三区| 午夜成人在线视频| 麻豆久久久久久久| voyeur盗摄精品| 91 com成人网| 国产精品久久久久久久久搜平片| 亚洲最新视频在线观看| 韩国三级在线一区| 色成人在线视频| 欧美精品一区二区三区在线 | 中文字幕精品—区二区四季| 一区二区三区在线观看视频| 男女视频一区二区| 懂色一区二区三区免费观看| 欧美日韩另类一区| 国产午夜精品一区二区三区四区| 亚洲综合视频在线观看| 国产在线不卡一卡二卡三卡四卡| 日本福利一区二区| 2017欧美狠狠色| 无吗不卡中文字幕| 国产福利91精品| 欧美日韩一区二区三区免费看| 久久久不卡影院| 香蕉成人啪国产精品视频综合网| 国产一区二区毛片| 欧美精品亚洲一区二区在线播放| 国产精品网站在线| 久久国产三级精品| 欧美在线制服丝袜| 中文字幕亚洲在| 懂色av一区二区在线播放| 51午夜精品国产| 一区二区三区四区在线播放| 成人免费av在线| 欧美r级在线观看| 手机精品视频在线观看| 91理论电影在线观看| 国产日产欧产精品推荐色| 麻豆精品一二三| 欧美日韩在线电影| 日韩激情视频网站| 在线观看亚洲精品视频| 亚洲欧美视频在线观看| 成人精品gif动图一区| 国产欧美日韩中文久久| 国产精品综合一区二区| 欧美精品一区二区三区在线| 久久 天天综合| 日韩一级黄色大片| 喷水一区二区三区| 欧美一区日韩一区| 老司机精品视频线观看86| 91精品国产色综合久久| 日本不卡123| 91精品国产福利在线观看 | 国产精品系列在线播放| 久久一留热品黄| 国产aⅴ综合色| 中文字幕一区二区三区蜜月| aaa欧美大片| 亚洲精品乱码久久久久久久久| 91丝袜美腿高跟国产极品老师| 亚洲天堂成人网| 欧美在线一二三四区| 日韩中文字幕麻豆| 亚洲精品在线观| 国产不卡在线视频| 亚洲欧美日韩系列| 欧美私人免费视频| 日韩一区精品字幕| 久久久综合精品| av午夜一区麻豆| 亚洲电影在线免费观看| 51精品视频一区二区三区| 国模套图日韩精品一区二区| 国产午夜精品美女毛片视频| 不卡视频一二三| 日韩精品每日更新| 国产色爱av资源综合区| 色婷婷精品久久二区二区蜜臂av| 国产成人免费在线视频| **欧美大码日韩| 91精品国产一区二区人妖| 国产成人av一区二区三区在线| 亚洲欧美日韩电影| 欧美一卡二卡在线| 成人精品国产一区二区4080| 亚洲国产精品久久人人爱蜜臀| 91精品午夜视频| 99免费精品在线观看| 蜜乳av一区二区三区| 国产精品色在线观看| 337p亚洲精品色噜噜狠狠| 波多野结衣亚洲| 日本欧美一区二区在线观看| 国产精品不卡在线观看| 日韩欧美一级精品久久| 一本大道av一区二区在线播放| 久久99精品久久久久久| 亚洲精品欧美在线| 国产色产综合色产在线视频| 欧美高清激情brazzers| 成人动漫一区二区| 久久99热这里只有精品| 亚洲在线成人精品| 欧美国产乱子伦| 精品国产一区二区三区不卡 | 欧美不卡一区二区三区| 欧美三片在线视频观看| www.亚洲色图| 91麻豆精品久久久久蜜臀| 波多野结衣欧美| 国内精品视频一区二区三区八戒 | 亚洲精品一区二区三区精华液| 在线观看亚洲精品| eeuss影院一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 国产精品美女一区二区三区| 精品国产免费视频| 91精品欧美福利在线观看| 在线观看日产精品| 岛国av在线一区| 国产成人免费av在线| 精品在线播放免费| 免费在线观看不卡| 免费观看在线色综合| 日本欧美一区二区| 蜜臀久久久久久久| 免费在线观看视频一区| 麻豆久久一区二区| 国产一区视频导航| 国产一区二区美女诱惑| 国产成人精品1024| 国产精品一区二区黑丝| 国产99久久久久| 波多野结衣欧美| 色婷婷亚洲综合| 欧美日韩视频在线一区二区 | 精品日韩一区二区三区免费视频| 欧美一二三四在线| 精品日韩一区二区三区| 久久久不卡影院| 国产精品久久久久久久久动漫 | 爽爽淫人综合网网站| 日日骚欧美日韩| 另类欧美日韩国产在线| 国产在线看一区| www.色精品| 777奇米四色成人影色区| 精品精品欲导航| 国产精品乱人伦| 亚洲国产乱码最新视频| 蜜桃精品视频在线| 国产成人av电影在线观看| 99国产麻豆精品| 欧美精品丝袜久久久中文字幕| 日韩欧美精品三级| 国产精品白丝在线| 青娱乐精品视频在线| 高清不卡一区二区在线| 欧美视频自拍偷拍| 精品国产乱码久久久久久老虎| 中文字幕在线播放不卡一区| 亚洲aaa精品| 成人精品小蝌蚪| 91精品国产综合久久久蜜臀粉嫩| 国产欧美一区二区精品性色| 亚洲国产欧美在线| 国产精品综合av一区二区国产馆| 一本色道久久综合亚洲91| 精品日韩一区二区| 亚洲一区二区三区影院| 国产精品一区二区在线看| 欧美伦理影视网| **欧美大码日韩| 国产成人亚洲综合a∨猫咪| 欧美精品丝袜中出| 亚洲精品欧美在线|