題目:7-9 旅遊規劃 (25 分)
#include#include#include#include#include#includeusing namespace std;
const int maxn=510;
const int inf=1e5+10;
bool mark[maxn];
int dist[maxn];
int cos[maxn];//記錄當前結點到源點的最小花費
int n,m,s,d;
int ans_dis,ans_cost;
struct node;
vectoradj[maxn];
void djkstra(int s,int d)
else if(!mark[id]&&dist[id]==dist[u]+adj[u][j].distance&&cos[id]>cos[u]+adj[u][j].cost)
}} ans_dis=dist[d];
ans_cost=cos[d];
}int main()
; vectoradj[maxn];
int prim(int s)
}} return ans;
}int main()
};priority_queueheap; //使用優先順序佇列實現最小堆
(2)priority_queue中取隊首元素:top()
queue中取隊首元素:front()
(3)m#include#include#include#include#includeusing namespace std;
const int maxn=1010;
struct edge
};priority_queueheap; //使用優先順序佇列實現最小堆
int tree[maxn]; //並查集
/*尋找根結點的同時路徑壓縮*/
int find(int x)
/*合併兩個集合*/
int union(int a,int b)
int kruskal(int n)
;//node graph[maxn];
vectoradj[maxn];
//int e[maxn]; //邊上活動最早開始時間
//int l[maxn]; //邊上活動最晚開始時間
int ve[maxn]; //頂點上活動最早開始時間
int vl[maxn]; //頂點上活動最晚開始時間
int in[maxn]; // 每個結點的入度,為0時入隊
stacks;
bool topologicalsort(int n)
} /*每次將所有入度為0的結點入棧,拓撲序*/
while(!q.empty())
} //cout<<"size: "} //fill(vl,vl+maxn,inf);
//vl[u]=ve[u];
fill(vl,vl+maxn,ve[u]);
printf("%d\n",ve[u]);
/*元素逐個出棧,即為逆拓撲序列,構造vl陣列*/
while(!s.empty())
}}
int main()
while(!s.empty())
s.pop();
calc_path(n);
//cout<<"end!!"<} return 0;
}
機試複習,更新中
include incldue include include include include incude include1.棧與佇列 定義棧如下 stack stk 定義佇列如下 stack q 棧提供了如下操作 stk.empty 如果棧為空,返回true,否則返回false stk.size...
計算機機試指南 動態規劃
1.n階樓梯上樓問題 題目描述 n階樓梯上樓問題 一次可以走兩階或一階,問有多少種上樓方式。非遞迴 輸入 輸入包括乙個整數n 1 n 90 輸出 有多組測試資料,對於每組資料,輸出當樓梯階數為n時的上樓方式個數 演算法思想 到達第n階樓梯的方式有兩種 從第n 1階樓梯走一階 從第n 2階樓梯走兩階。...
常用演算法模板(持續更新)
你還在用迴圈累乘嗎?如果是的話,那麼你就要wa了,而且大數妥妥的超時 來來,本菜鳥帶你們學一下基於二進位制的快速冪 本例子我們用m的n次方 比如2 13,把13化為二進位制1101 那麼我們就可以把 21101 20001 20100 21000 int fun int n return sum 簡...