日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVA216 ——dfs

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA216 ——dfs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼如下,注釋很清楚,稍微學過數據結構的應該可以看懂

#include<iostream> #include<cmath> #include<cstring> #include<stdio.h> using namespace std; #define MAXNUM 9int x[MAXNUM],y[MAXNUM];//記錄坐標 double dis[MAXNUM][MAXNUM];//記錄兩點間距離,作為圖的鄰接矩陣 int ans_order[MAXNUM];//存儲dfs遍歷節點的順序 int tem_order[MAXNUM];//臨時存儲dfs遍歷節點的順序 double min_dis = 10000000;//最短距離 int visit[MAXNUM];//記錄節點是否被訪問 int n ;double distance(int x1,int y1,int x2,int y2){//兩點間距離return sqrt(pow( x1-x2 ,2)+pow(y1-y2,2)); }void dfs(int cur){//對圖進行第cur深度的深搜if ( cur == n ){//如果深度超過圖的節點個數,則對當前深搜所得到的連通圖進行判斷double sum = 0 ;for (int i = 0 ; i < n-1 ; i ++){//求當前所得連通圖的代價,即題目題目中的stepsum+=dis[tem_order[i]][tem_order[i+1]];}if (sum < min_dis){min_dis = sum ;memcpy(ans_order,tem_order,sizeof(tem_order));}}else{//對圖進行第cur深度的深搜for( int i = 0 ; i < n ; i++){//遍歷節點,找到下一個沒有被訪問的節點繼續深度搜索if(!visit[i]){visit[i] = 1 ;tem_order[cur] = i ;//當前深搜順序的第cur個節點是idfs(cur+1);//對圖進行第cur+1深度的深搜visit[i] = 0;//相當于該節點退棧}}}}int main (){int time = 0;while (cin>>n && n!=0){time ++ ;for (int i = 0 ; i < n ; i++){//輸入并計算距離scanf("%d %d",&x[i],&y[i]);visit[i] = 0 ;for (int j = 0 ; j < i ; j++){dis[i][j] = dis[j][i] = distance(x[j],y[j],x[i],y[i]);}}min_dis = 1000000;dfs(0);printf("**********************************************************\n");printf("Network #%d\n",time);for (int i = 0 ; i < n-1; i++){printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n",x[ans_order[i]],y[ans_order[i]],x[ans_order[i+1]],y[ans_order[i+1]],dis[ans_order[i]][ans_order[i+1]]+16);}printf("Number of feet of cable required is %.2lf.\n",min_dis+16*(n-1));}return 0; }

總結

以上是生活随笔為你收集整理的UVA216 ——dfs的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。