//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; }
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); }