using System.Collections.Generic;
static List<Element> listOfElements = new List<Element>();
static List<Link> listOfLinks = new List<Link>();
public static void Main()
for (int i = 0; i < 100; i++) {
listOfElements.Add(new Element());
for (int i = 0; i < 50; i++)
listOfLinks.Add(new Link(GetNextAvaibaleElement().Id,GetNextAvaibaleElement().Id));
for (int i = 0; i < listOfLinks.Count; i++)
Console.WriteLine(listOfLinks[i].ToString());
private static Element GetNextAvaibaleElement() {
var usedElementIds = listOfLinks.Select(i => i.ElementOne).Union(listOfLinks.Select(i => i.ElementTwo)).ToList();
return listOfElements.Where(i => !usedElementIds.Contains(i.Id)).OrderBy(i => Guid.NewGuid()).FirstOrDefault();
this.Id = Guid.NewGuid();
public Guid Id { get; set; }
public Link(Guid ElementOne, Guid ElementTwo)
this.ElementOne = ElementOne;
this.ElementTwo = ElementTwo;
public Guid ElementOne { get; set; }
public Guid ElementTwo { get; set; }
public override string ToString()
return string.Format("{0},{1}", ElementOne, ElementTwo);