示例#1
0
//This will be smiliar to DLS in that it will simply call DFS but unlike DLS it will call
//dls in a loop for each level of the tree.
bool Algorithms::IDS(int maxDepth, Node * Tree,int & cutoff,queue<Node *> &Path)
{
    bool goalFound = false;
    for(int i=0;i<=maxDepth;i++)
    {
        if(DLS(i,Tree,Path))
        {
            cutoff = i;
            goalFound = true;
            break;
        }
        else
        {
            while(!Path.empty()) Path.pop();
        }
    }
    return goalFound;
}
示例#2
0
文件: allAlg.c 项目: qinshijia/GSAD
void all_start(){
	Result res;
	int showFlag;
	char snumOpen[4],snumClose[4],sfindFlag[4];
  	const	char *start,*end;
	const 	char *file;
	start = gtk_entry_get_text(GTK_ENTRY(TallStart));
	end = gtk_entry_get_text(GTK_ENTRY(TallEnd));
	file= gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(FallFile));

	showFlag = 0;
	CreatALGraph(file);

	//广度优先搜索算法
	res = BFS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[0]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[0]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[0]),sfindFlag);

	//深度优先搜索算法	
	res = DFS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[1]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[1]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[1]),sfindFlag);

	//深度受限搜索算法
	res = DLS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[2]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[2]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[2]),sfindFlag);

	//迭代搜索算法
	res = IDS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[3]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[3]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[3]),sfindFlag);

	//等代价搜索算法
	res = UCS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[4]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[4]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[4]),sfindFlag);

	//最佳优先搜索算法
	res = BestFS(*start,*end,showFlag);
	sprintf(snumOpen,"%d",res.numOpen);
	sprintf(snumClose,"%d",res.numClose);
	if(res.findFlag == 1){
		strcpy(sfindFlag,"是");
	}else{
		strcpy(sfindFlag,"否");
	}
	gtk_entry_set_text(GTK_ENTRY(TallOpen[5]),snumOpen);
	gtk_entry_set_text(GTK_ENTRY(TallClose[5]),snumClose);
	gtk_entry_set_text(GTK_ENTRY(TallFind[5]),sfindFlag);
}