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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sa_alg.cpp

?? 用經(jīng)典的局部搜索算法模擬退火算法求解一個圖的最大可平面子圖。
?? CPP
字號:
// The maximum planar subgraph project 2002 
// University of Tampere, Finland
// Department of Computer and Information Sciences
// Corresponding author: Timo Poranen, tp@cs.uta.fi

// SA_ALG.cpp
// - simulated annealing algorithm

#include <LEDA/ugraph.h>
#include <LEDA/set.h>
#include <LEDA/list.h>
#include <LEDA/node_list.h>
#include <LEDA/graph_misc.h> 
#include <LEDA/graph_alg.h>

#include <LEDA/array.h>

#include <iostream.h>
#include <stdlib.h>
#include "sa_graph.h"

void sa_graph::sa2()
{      
  //open trace file if used
  if (trace==true)
    {
      ofstream tracef(traceFileName, ios::out);  
      if (!tracef) {
	cout<<"Can not open tracefile "<<traceFileName<<endl;	
	exit(0);
      }
      tracef.close();
    }
  
  cout<<"Simulated Annealing algorithm started"<<endl;
  initialize_sa();    
  foundTemperature=t0;
  cout<<"initialization";
  edge e;
  //first we insert all edges to first set!
  setInitialSolution(0);  
  int tCounter=0;
  int sSet=0;
  int sizeOfSSet=0;

  //to get data from runs of algorithm
  int godMoveCounter=0;
  int badMoveCounter=0;
  int evenMoveCounter=0;
  int unAcceptedMoves=0;
  
  int tGodMoveCounter=0;
  int tBadMoveCounter=0;
  int tEvenMoveCounter=0;
  int tUnAcceptedMoves=0;

  bool optimalSolutionFound=false;
  double t=t0;
  int counter=0;
  edge e1;
  edge e2;
  int e1o=0;
  int e2o=0;

  int sum=0; //for checking... (remove later)

  int eb=3*vertices-6;  
  //copy edges from sets to array A
  //and initialize it!
  arraySizes = new int [2];
  A = new array<edge> * [2];  

  for (int i=0;i<2;i++)
    {
      A[i]= new array<edge>(edges);
      arraySizes[i]=0;
    }

 //  cout<<"here3"<<endl;  
 //copy edges to partition!
 //copy items from edge sets to edge arrays

  forall_edges(e,*G)
    {
      A[1]->set(counter,e);
      G->assign(e,1); //assign partition number!       
      counter++;
    }
  arraySizes[1]=counter;

  counter=0; //counter is also used in the sa's main loop
  
  //to save space, delete set and other unimportant data
  //  cout<<"here4"<<endl;  
  delete_ini_stuff();

  e1o=1; //(not) planar set (could be planar for graphs with thickness 2)
  e2o=0; //planar set
  
  while (t>t1 && !optimalSolutionFound)
    {           
      if (trace==true)
	{
	  ofstream tracef(traceFileName, ios::app);  
	  if (!tracef) {
	    cout<<"Can not open tracefile "<<traceFileName<<endl;	
	    exit(0);
	  }
	  //cout<<"writing trace file: "<<t<<" "<<arraySizes[e2o]<<endl;
	  tracef<<t<<"  "<<arraySizes[e2o]<<endl;
	  tracef.close();		  
	}
      
      //      cout<<"in big loop"<<endl;
      while (counter<inner_loop && !optimalSolutionFound)
	{	  	  
	  counter++;
	  tCounter++; //for tracking whole run of algorithm
	  //cout<<"here5"<<endl;  	  
	  int e1Index=rand()%arraySizes[e1o];

	  
	  //cout<<"e1index: "<<e1Index<<" e2index: "<<e1Index<<endl;
	  
	  e1=A[e1o]->get(e1Index);

	  //cout<<"hereB"<<endl;  	  	  
	  if (arraySizes[e2o]<eb)
	    {	
	      //  cout<<" in the B"<<endl;
	      A[e2o]->set(arraySizes[e2o],e1); 
	      arraySizes[e2o]++;	
	      //cout<<" in the B1, e2o:"<<e2o<<endl;      	      

	      if (isArrayPlanar(e2o)==true) //fine!
		{	      	
		  //  cout<<"hereC"<<endl;  	  	  
		  //cout<<" good move!"<<endl;
		  godMoveCounter++;
		  edge tmp = A[e1o]->get(arraySizes[e1o]-1);		  
		  A[e1o]->set(e1Index,tmp);
		  arraySizes[e1o]--;		    		  
		}
	      else		
		{
		  //cout<<"hereD"<<endl;  	  	  
		  arraySizes[e2o]--;
		  
		  //choose edge from planar set
		  int e2Index=rand()%arraySizes[e2o];
		  e2=A[e2o]->get(e2Index);

		  A[e2o]->set(e2Index,e1);
		  A[e1o]->set(e1Index,e2);
		  
		  if (isArrayPlanar(e2o)==true) //fine!
		    {
		      //cout<<"Set "<<e2o<<" is planar after swap!!!!"<<endl;
		      evenMoveCounter++;
		    }		  
		  //swap was not possible.
		  //we try to move that edge from larger partition to smaller one!
		  else
		    {
		      //cout<<"SA test that do we move an edge to the non-planar partition!"<<endl;
		      //take again all changes back...
		      A[e2o]->set(e2Index,e2);
		      A[e1o]->set(e1Index,e1);

		      //double cDeviation=deviation2(partitionCounter,arraySizes);
		      
		      A[e1o]->set(arraySizes[e1o],e2); 
		      arraySizes[e1o]++;
		      
		      double randomNumber = rand()/double(RAND_MAX);
		      double probability = exp(-1/t);			      
		      
		      //cout<<randomNumber<<" ? <= "<<probability<<endl;			      
		      if (randomNumber<(probability))
			{		  		   
			  badMoveCounter++;				  
			  edge last=A[e2o]->get(arraySizes[e2o]-1);
			  A[e2o]->set(e2Index,last); 			      
			  arraySizes[e2o]--;			      				
			}
		      else //(randomNumber<probability)
			{		  		   
			  arraySizes[e1o]--;
			  unAcceptedMoves++;
			}
		    }
		  
		  
		}
	    }
	  else 
	    {
	      //maximum planar subgraph found! (due to euler bound)
	      //do nothing
	    }

	  int size_of_largest_set=arraySizes[0];
	  
	  if (size_of_largest_set>largestPlanarSubgraph)
	    {
	      largestPlanarSubgraph=size_of_largest_set;
	      foundTemperature = t;
	    }
	  cout<<counter<<" / "<<inner_loop<<" current: "<<size_of_largest_set<<" best: "<<largestPlanarSubgraph<<endl;      
	  if (largestPlanarSubgraph==eb)
	    {
	      optimalSolutionFound=true;	      
	    }	      
	  
	  if (badMoveCounter+godMoveCounter+evenMoveCounter+unAcceptedMoves != counter && optimalSolutionFound==false)
	   {
	     cout<<"errors when counting moves!"<<endl;	      	      
	     exit(0);
	   }	  
	  //we check total number of god, bad , even and uinaccepted moves
	  
	}
      
      cout<<"Temperature: "<<t<<endl;
      cout<<"GOD MOVES "<<godMoveCounter<<" / "<<inner_loop<<endl;
      cout<<"EVEN MOVES "<<evenMoveCounter<<" / "<<inner_loop<<endl;
      cout<<"BAD MOVES "<<badMoveCounter<<" / "<<inner_loop<<endl;
      cout<<"UNACCEPTED MOVES "<<unAcceptedMoves<<" / "<<inner_loop<<endl;

      badMoveCounter=0;
      godMoveCounter=0;
      evenMoveCounter=0;
      unAcceptedMoves=0;
      
      t=alpha*t;
      counter=0;
    }

  if (trace==true)
    {
      ofstream tracef(traceFileName, ios::app);  
      if (!tracef) {
	cout<<"Can not open tracefile "<<traceFileName<<endl;	
	exit(0);
      }
      //      cout<<"writing trace file: "<<t<<" "<<arraySizes[e2o]<<endl;
      tracef<<t<<"  "<<arraySizes[e2o]<<endl;
      //cout<<"Log file closed."<<endl;
      tracef.close();		  
    }


  for (int i=0;i<2;i++)
    {
      delete A[i];
    }
  delete [] A;
      
  cout<<"Largest found planar subgraph: "<<largestPlanarSubgraph<<endl;
  cout<<"Simulated Annealing algorithm ended"<<endl;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91丝袜在线播放| 日本欧美一区二区在线观看| 国产成人精品午夜视频免费| 久久综合九色欧美综合狠狠 | 精品成人a区在线观看| 麻豆免费精品视频| 国产片一区二区三区| 丁香桃色午夜亚洲一区二区三区| 欧美激情在线一区二区| 成人av网站在线观看| 亚洲综合色婷婷| 欧美一区二区三区视频免费播放| 日本sm残虐另类| 久久精品一区二区三区不卡| 一本大道久久a久久精品综合| 亚洲曰韩产成在线| 日韩一区二区在线免费观看| 狠狠久久亚洲欧美| 亚洲国产精品av| 欧美老年两性高潮| 国产成人亚洲综合色影视| 亚洲精品国产第一综合99久久 | 精品福利在线导航| proumb性欧美在线观看| 亚洲成人激情自拍| 久久久久久久久久久电影| 一本色道久久综合亚洲aⅴ蜜桃 | 色婷婷精品大在线视频 | 亚洲国产日韩在线一区模特| 91精品视频网| av亚洲精华国产精华| 日韩电影在线观看一区| 国产精品美女久久福利网站| 欧美精品乱码久久久久久按摩 | 99国产精品久久| 麻豆高清免费国产一区| 亚洲免费观看高清完整版在线观看 | 欧美成人午夜电影| 色综合久久中文综合久久牛| 狠狠色伊人亚洲综合成人| 亚洲婷婷综合久久一本伊一区| 91麻豆精品国产91久久久资源速度| 成人黄色av电影| 久久电影网站中文字幕| 亚洲欧美日韩久久| 国产亚洲一区二区三区在线观看| 欧美日韩五月天| 高清beeg欧美| 美女视频黄a大片欧美| 亚洲精品中文字幕在线观看| 精品久久久久av影院 | 91麻豆精品国产91久久久资源速度| 成人精品视频一区| 精品一区二区三区av| 天天射综合影视| 一级中文字幕一区二区| 国产精品嫩草影院av蜜臀| 久久久久久一二三区| 精品国产三级电影在线观看| 在线播放91灌醉迷j高跟美女| 色综合天天狠狠| 97国产一区二区| yourporn久久国产精品| 成人精品亚洲人成在线| 国产在线视频精品一区| 久久99精品久久久久久国产越南| 亚洲成av人片一区二区梦乃| 亚洲精品视频在线看| 综合婷婷亚洲小说| 中文字幕成人网| 国产精品久久久久影院亚瑟| 久久久久国产精品免费免费搜索| 欧美大度的电影原声| 欧美一区二区在线不卡| 日韩一级大片在线| 9191精品国产综合久久久久久| 欧美区在线观看| 这里只有精品免费| 日韩午夜激情av| 精品美女被调教视频大全网站| 日韩欧美中文一区| 欧美r级在线观看| 久久久久久久电影| 国产视频911| 中文字幕一区二区三区视频| 国产精品你懂的| 一区二区三区日韩精品视频| 亚洲一区在线视频| 日韩和欧美的一区| 精品中文av资源站在线观看| 国产一区二区主播在线| 国产成a人无v码亚洲福利| 不卡的av电影在线观看| 色一情一乱一乱一91av| 欧美视频三区在线播放| 宅男噜噜噜66一区二区66| 精品福利在线导航| 中文字幕在线播放不卡一区| 一区二区三区在线不卡| 香蕉久久夜色精品国产使用方法| 日韩精品电影一区亚洲| 极品销魂美女一区二区三区| 成人黄色片在线观看| 欧美自拍偷拍一区| 日韩欧美中文一区| 欧美高清在线一区二区| 亚洲福利视频一区| 黄色成人免费在线| 色av综合在线| 欧美一卡2卡三卡4卡5免费| 国产欧美日本一区视频| 亚洲午夜羞羞片| 国产尤物一区二区| 91国在线观看| 欧美精品一区二区三区蜜桃| 亚洲欧洲av在线| 青青青伊人色综合久久| 成人国产电影网| 91精品国产综合久久福利 | 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产人成综合网站| 国产精品综合网| 欧美日本在线播放| 国产精品污网站| 美女高潮久久久| 在线看不卡av| 久久精品视频网| 婷婷综合久久一区二区三区| 成人亚洲精品久久久久软件| 欧美精品丝袜中出| 国产精品久久久久久亚洲伦| 日本欧美一区二区| 日本高清免费不卡视频| 久久久久成人黄色影片| 午夜精品久久久久久久99樱桃| 国产·精品毛片| 日韩欧美国产一区二区三区| 亚洲一区二区在线视频| 成人免费观看av| 欧美大片拔萝卜| 日韩精品一二三| 欧美在线视频不卡| 综合网在线视频| 成人精品一区二区三区四区 | 亚洲成人综合网站| 94色蜜桃网一区二区三区| 国产清纯白嫩初高生在线观看91| 麻豆免费看一区二区三区| 欧美日本韩国一区二区三区视频| 日韩久久一区二区| 99久久综合99久久综合网站| 久久亚洲一区二区三区四区| 99国产精品久久久| 国产视频一区在线观看| 久88久久88久久久| 欧美一区二区性放荡片| 日本欧美一区二区| 欧美伦理影视网| 亚洲制服丝袜在线| 色嗨嗨av一区二区三区| 亚洲精品久久7777| 日本道在线观看一区二区| 最新国产の精品合集bt伙计| 精品久久人人做人人爽| 日日夜夜精品免费视频| 欧美日韩五月天| 五月天亚洲精品| 精品视频1区2区| 天涯成人国产亚洲精品一区av| 欧美性感一区二区三区| 亚洲一区国产视频| 欧美精品久久99久久在免费线| 亚洲成人综合网站| 精品视频999| 青青草91视频| 精品国产3级a| 中文字幕欧美日本乱码一线二线| 国产成人a级片| 亚洲国产日韩一级| 欧美国产1区2区| 欧美精品aⅴ在线视频| 久久99国内精品| 免费亚洲电影在线| 亚洲精品自拍动漫在线| 久久综合久久久久88| 欧美一区国产二区| 色妹子一区二区| eeuss鲁片一区二区三区在线观看| 视频精品一区二区| 最新不卡av在线| 2023国产精品| 2023国产精品| 日韩欧美一级二级三级久久久| 在线影院国内精品| 91在线看国产| 91精品国产一区二区| 日本丶国产丶欧美色综合| 欧美精品123区| 色噜噜狠狠成人中文综合| 精品日韩一区二区三区免费视频|