質問の意味:
7文字のN入力文字列。番号に対応する異なる位置の二つの文字列間の距離。
ソリューション:
テンプレートを生成するために最低限
各処理間の暴力距離二つの文字列(すなわち、二つの文字列間の差の数)
それはプリムととても密グラフがあるが、私は怠け者だから~~クラスカルよりも良いです
コード:
#include <iostreamの> する#include <stdio.hに> する#include <math.h>の 書式#include <アルゴリズム> の#include <ベクトル> 使用して 名前空間STD。 typedefの長い 長いLL。 const int型 MAXN = 2010 ; INT [MAXN] F。 チャー S [MAXN] [ 10 ]。 int型N、CNT、Q。 構造体ノード { int型U、V、W。 ブール 演算子 <(constのノード&A)のconst { リターン <W AW。 } }エッジ[MAXN * MAXN]。 INT検索(int型X) { 戻り X == F [x]はx:F [X] = 検索(F [X])。 } ボイド追加(INT U、INT V、INT W) { エッジ[CNT] .U = U。 エッジ[CNT] .V = V。 エッジ[CNT。++]、W = W。 } INT クラスカル() { int型 ANS = 0 。 以下のために(int型 I = 0 F [I] = iは++; iが<= N)I。 ソート(エッジ、エッジ + CNT)。 以下のために(int型 i = 0 ; iはCNT <I ++の) { int型のx = エッジを[I] .U。 INT Y = エッジ[I] .V。 int型の FX = (x)の検索; int型 FY = (y)を見つけます。 もし(!FX = FY) { F [FX] = FY。 ANS + = エッジ[I] .W。 } } 戻りANS。 } int型 get_disを(char型 []、チャーB []) { int型ANS = 0 ; 以下のために(int型 i = 0 ; iは< 7 iは++; ) { 場合([I] = B [i]は!)ANS ++ 。 } 戻りANS。 } int型のmain() { ながら(〜のscanf(" %d個"、&N)&& N) { ため(int型 i = 0 ; iがn <; iは++)のscanf(" %sの" 、S [I])。 CNT = 0 ; 以下のための(int型 I = 0; iがN <; I ++)のための(INT J = I + 1、J <nであり、j ++ ) { int型 DIS = get_dis(S [i]は、S [J])。 (I、J、DIS)を追加します。 } int型の FM = クラスカル()。 printf(" 最高可能品質は1 /%dの\ nである。" 、FM)。 } 戻り 0 。 }