資源簡介
注意,此程序包缺少幾個對象的定義類文件,本以為無大礙 ,因為程序主要是看邏輯,定義的類換一個場景可能就失效了。但是,鑒于大家的反饋,我將在重新上傳完整的代碼。下載此資源的朋友也可通過加我的QQ與我交流溝通。
本資源是我參與中興迪杰斯特拉比賽的解題代碼,效果還不錯,但是可惜比賽終止了。如果有相似的情景需求可以參考一下。從測試賽題來看,網格中在網格中有1000個鏈路需要填入,每個鏈路都有三個選擇,而我們的目標是要使填完后網格中的最大鏈路利用率最低。看起來簡單,但是要在一分鐘內盡可能地逼近最優解(用工具測試的樣例的最優解是37.08左右,這需要運行幾分鐘的時間),還是很有挑戰的。

代碼片段和文件信息
package?com.hsy.competition2;
import?java.math.BigDecimal;
import?java.text.DecimalFormat;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.Map;
public?class?Main?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?constructor?stub
LogUtil.printLog(“Begin“);
String?girdPath?=?“D:\\資料\\中興比賽\\迪杰斯特拉\\case1\\gridtopo.txt“;
String?reqPath?=?“D:\\資料\\中興比賽\\迪杰斯特拉\\case1\\request.txt“;
String?resPath?=?“D:\\資料\\中興比賽\\迪杰斯特拉\\case1\\結果.txt“;
String[]?grid?=?FileUtil.read(girdPath?null);
String[]?req?=?FileUtil.read(reqPath?null);
/*=============================處理Gridtopo.txt===================================?*/
Gridtopo?topo?=?new?Gridtopo();
topo.totalNodeNum?=?Integer.parseInt(grid[0].split(“?“)[0]);
topo.totalPathNum?=?Integer.parseInt(grid[0].split(“?“)[1]);
int[][]?totalBW?=?new?int[topo.totalNodeNum][topo.totalNodeNum];
int[][]?usedBW?=?new?int[topo.totalNodeNum][topo.totalNodeNum];
int[][]?link?=?new?int[topo.totalPathNum][2];
for(int?i=1;i<=topo.totalPathNum;i++){
String?s[]?=?grid[i].split(“?“);
int?nodeA?=?Integer.parseInt(s[0]);
int?nodeB?=?Integer.parseInt(s[1]);
int?bandWith?=?Integer.parseInt(s[2]);
//有向圖
link[i-1][0]?=?nodeA;
link[i-1][1]?=?nodeB;
totalBW[nodeA][nodeB]?=?bandWith;
totalBW[nodeB][nodeA]?=?bandWith;
// topo.Nodes.add(new?Node(nodeAnodeBbandWith));
// topo.Nodes.add(new?Node(nodeBnodeAbandWith));
}
/*=============================處理request.txt===================================?*/
int?totalRequestNum?=?Integer.parseInt(req[0].split(“?“)[0]);
int?eachRquestPathNum?=?Integer.parseInt(req[0].split(“?“)[1]);
Requests?requests?=?new?Requests(totalRequestNumeachRquestPathNum);
Requests?newRequests?=?new?Requests(totalRequestNumeachRquestPathNum);
int?index?=?1;
for(int?i=0;i
int?id?=?Integer.parseInt(req[index].split(“?“)[0]);
int?bandWidth?=?Integer.parseInt(req[index].split(“?“)[1]);
index++;
ArrayList>?paths?=?new?ArrayList<>(eachRquestPathNum);
for(int?j=0;j
String[]?strList?=?req[index++].split(“?“);
ArrayList?path?=?new?ArrayList<>();
for(String?s:strList){
path.add(Integer.parseInt(s));
}
paths.add(path);
}
Request?request?=?new?Request(id?bandWidth?paths);
newRequests.getRequestsList().add(request);
requests.getRequestsList().add(request);
}
/*=============================分配===================================?*/
double?score?=?SA.assign(requeststotalBWusedBWlink);
System.out.println(“最終“+score);
if(score?>?1){
System.out.println(“NA“);
FileUtil.write(resPath?new?String[]?{?“NA“?}?false);
}else{
/*============================輸出結果=======================================*/
String[]?result?=?new?String[requests.getTo
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????314807??2018-04-18?09:44??迪杰斯特拉\case1\grditopoAndRequest.txt
?????文件??????13916??2018-03-19?10:23??迪杰斯特拉\case1\gridtopo.txt
?????文件?????300891??2018-03-19?10:23??迪杰斯特拉\case1\request.txt
?????文件?????107030??2018-04-18?09:48??迪杰斯特拉\case1\result.txt
?????文件?????105833??2018-08-23?11:03??迪杰斯特拉\case1\結果.txt
?????文件????????346??2018-04-18?10:54??迪杰斯特拉\readme.txt
?????文件???????3787??2018-08-23?11:03??迪杰斯特拉\代碼\Main.java
?????文件????????220??2018-08-23?11:12??迪杰斯特拉\代碼\readme.txt
?????文件???????6235??2018-05-08?10:21??迪杰斯特拉\代碼\SA.java
?????文件?????105801??2018-05-07?10:43??迪杰斯特拉\代碼\結果.txt
?????文件?????254296??2018-04-18?10:49??迪杰斯特拉\迪杰斯特拉門派賽題.pdf
?????目錄??????????0??2018-08-23?11:08??迪杰斯特拉\case1
?????目錄??????????0??2018-08-23?11:09??迪杰斯特拉\代碼
?????目錄??????????0??2018-08-23?11:08??迪杰斯特拉
-----------?---------??----------?-----??----
??????????????1213162????????????????????14
- 上一篇:Boykov的GraphCut算法
- 下一篇:股票模擬系統數據庫e-r圖
評論
共有 條評論