Çift boyutlu bir diziyi ağaç yapısına çevirmem gerekiyor. Çevirme mantığı olarak nasıl bir yol izlemem gerekiyor.
örnek dizi
M K K F M G A B A M B D
ağaç yapısı A -B --D -M --G --K ---F
merhaba. Once agaci kokunu bulalim.. cift boyutlu dizimizde ikinci elemanlarda olmayan eleman bize koku veriyor. Sonra bu cift boyutlu dizimizde dizimizdeki elemanlar bitene kadar donmemiz, ba$ka bir yerde, agacimizi olu$turmamiz gerekli.
buyuk olasilikla daha compact yazilabilir
using System; using System.Collections;
namespace ConsoleApplication1 { class Program { public static String[,] myStrings = new String[6, 2] { { "M", "K" }, { "K", "F" }, { "M", "G" }, { "A", "B" }, { "A", "M" }, { "B", "D" } }; static void Main(string[] args) { ArrayList allStrings = new ArrayList(); ArrayList foundStrs = new ArrayList(); string foundStr = ""; foreach (var s in myStrings) { if(!allStrings.Contains(s[0])) { allStrings.Add(s[0]); } } foreach (var s in allStrings) { for (int i = 0; i < myStrings.Length/2; i++) { if (myStrings[i,1].Equals(s.ToString())) { foundStrs.Add(s.ToString()); } } } foreach (var s in allStrings) { if(!foundStrs.Contains(s.ToString())) { foundStr = s.ToString(); } } Console.WriteLine(foundStr);
for (int i = 0; i < myStrings.Length/2; i++) { if(myStrings[i,0].Equals(foundStr)) { branchLevel = 1; WriteBranch(myStrings[i, 0], myStrings[i,1]); }
} Console.ReadLine(); }
private static int branchLevel = 1; private static void WriteBranch(string root, string branch) { for (int i = 0; i < branchLevel; i++) { Console.Write("-"); } Console.WriteLine(branch); for (int i = 0; i < myStrings.Length / 2; i++) { if(myStrings[i,0].Equals(branch)) { branchLevel++; WriteBranch(myStrings[i, 0], myStrings[i, 1]); } } branchLevel--; } } }
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme