求解最小生成元

2021-08-17 19:09:48 字數 841 閱讀 2672

前言

因為看著劉汝佳的演算法書學習的演算法,今天聊聊最小生成元,關於這一點我覺得書上的方法有些不妥,因為就拿出來說說,這個演算法相對還是比較簡單的。

最小生成元問題描述

如果x加上x的各個位數字之和得到y,就說x是y的生成元;給出n,(1<=n<=100000),求最小生成元。無解輸出0。例如,n=216,121,2005時的解分別為198 , 0, 1979。

演算法思路

1、如果考慮到多次求解的話,那麼就先把所有的數的最小生成元求解出來存放在陣列中,後面求解的時候直接通過陣列中獲取。

2、如果只是求解幾次的話,那麼就不用採用以上方法,例如我們求解216的最小生成元,根據描述我們可以知道,最小生成元一定是大於216-9*3=189的。因為最小生成元+每個數字的和得到y,那麼當每個數字和最大的時候,最小生成元就是最小的。

**實現1

#include

#include

#define max 100050

int main()

if(!a[sum+i])

}scanf("%d", &num);

while(num--)

return

0;}

**實現2

#include

#include

int main()

for(int i=num-count*9; iint

sum=0;

temp = i;

while(temp>0)

if(sum+i == num)

}if(!flag)

}

最小生成元 java

如果x加上x的各個位數字之和得到y,就說x是y的生成元 給出n,1 n 100000 求最小生成元。無解輸出0.例如,n 216,121,2005時的解分別為198,0,1979。198 1 9 8 216 1979 1 9 7 9 2005 我的思路如下 1.從0找到n所有的數字 2.將這些數字轉...

求解最小生成樹

1.prim演算法求解,其思路與dijkstra差不多,不斷貪心往已選定的集合眾新增點,最終得到一棵最小生成樹。具體為什麼最 不清 1 int map 105 105 2 int mincost 105 3 int vis 105 4 void prim 518 if v 1 break 19 vi...

prim演算法求解最小生成樹

首先滿足樹的條件,各邊權值加起來是最小的,同乙個圖的最小生成樹可能是不同的但是權值之和是一樣的 prim 假設有乙個圖,裡面的頂點可以分為,已近加入樹的和未加入樹的 從第乙個頂點開始,尋找權值最小的邊,然後把這個邊相連的頂點加入,已經在樹的集合內 在這兩個集合相連的節點上尋找權值最小的邊加入和 上 ...