Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 4 KB
using System;
using System.IO;
namespace Regiok
{
class Telepules : IComparable<Telepules>
{
static int aktualSorszam = 0;
int x;
int y;
int sorszam;
public Telepules(int x, int y)
{
X = x;
Y = y;
sorszam = ++aktualSorszam;
}
public int X
{
get
{
return x;
}
set
{
if (value < 0 || value > 1000)
throw new ArgumentOutOfRangeException("value");
x = value;
}
}
public int Y
{
get
{
return y;
}
set
{
if (value < 0 || value > 1000)
throw new ArgumentOutOfRangeException("value");
y = value;
}
}
public int Sorszam
{
get { return sorszam; }
}
public int Tavolsag(Telepules telepules)
{
if (telepules == null)
throw new ArgumentNullException("telepules");
return (Math.Abs(this.X - telepules.X) + Math.Abs(this.Y - telepules.Y));
}
public static int Tavolsag(Telepules telepules1, Telepules telepules2)
{
if (telepules1 == null)
throw new ArgumentNullException("telepules1");
if (telepules2 == null)
throw new ArgumentNullException("telepules2");
return telepules1.Tavolsag(telepules2);
}
public int CompareTo(Telepules telepules)
{
return (this.Sorszam - telepules.Sorszam);
}
public override string ToString()
{
return string.Format("Sorszám: {0}", Sorszam);
}
}
class Regio
{
const int MaxTelepulesSzam = 100;
Telepules[] telepulesek = new Telepules[MaxTelepulesSzam];
int telepulesekSzama = 0;
public int TelepulesekSzama
{
get { return telepulesekSzama; }
}
public void Egyesit(Regio regio)
{
if (regio == null)
throw new ArgumentNullException("regio");
if (this.TelepulesekSzama + regio.TelepulesekSzama > MaxTelepulesSzam)
throw new InvalidOperationException("Nem lehet egyesíteni a két régiót.");
for (int i = 0; i < regio.TelepulesekSzama; i++)
telepulesek[telepulesekSzama++] = regio.telepulesek[i];
regio.telepulesekSzama = 0;
}
public bool Szomszedos(Telepules telepules, int tavolsag)
{
if (telepules == null)
throw new ArgumentNullException("telepules");
for (int i = 0; i < telepulesekSzama; i++) {
if (telepules.Tavolsag(telepulesek[i]) <= tavolsag)
return true;
}
return false;
}
public void Hozzaad(Telepules telepules)
{
if (telepules == null)
throw new ArgumentNullException("telepules");
if (telepulesekSzama >= telepulesek.Length)
throw new InvalidOperationException("A régió nem tartalmazhat több települést.");
telepulesek[telepulesekSzama++] = telepules;
}
public void Kiir(TextWriter writer)
{
if (writer == null)
return;
Array.Sort(telepulesek, 0, telepulesekSzama);
for (int i = 0; i < telepulesekSzama; i++)
writer.Write("{0} ", telepulesek[i].Sorszam);
Console.WriteLine();
}
}
class Megye
{
Regio[] regiok;
int regiokSzama;
int maxTavolsag;
public Megye(int maxRegioSzam, int maxTavolsag)
{
if (maxRegioSzam < 1 || maxRegioSzam > 100)
throw new ArgumentOutOfRangeException("maxRegioSzam");
if (maxTavolsag < 1 || maxTavolsag > 1000)
throw new ArgumentOutOfRangeException("maxTavolsag");
regiok = new Regio[maxRegioSzam];
this.maxTavolsag = maxTavolsag;
}
public void UjTelepules(Telepules telepules)
{
if (telepules == null)
throw new ArgumentNullException("telepules");
int besoroltRegio = -1;
for (int i = 0; i < regiokSzama; i++) {
if (regiok[i].Szomszedos(telepules, maxTavolsag)) {
if (besoroltRegio == -1) {
regiok[i].Hozzaad(telepules);
besoroltRegio = i;
}
else {
regiok[besoroltRegio].Egyesit(regiok[i]);
Torol(i);
}
}
}
if (besoroltRegio == -1) {
Regio regio = new Regio();
regio.Hozzaad(telepules);
regiok[regiokSzama++] = regio;
}
}
private void Torol(int index)
{
if (index < 0 || index >= regiokSzama)
return;
regiok[index] = regiok[--regiokSzama];
}
public void Kiir(TextWriter writer)
{
if (writer == null)
return;
writer.WriteLine(regiokSzama);
for (int i = 0; i < regiokSzama; i++)
regiok[i].Kiir(writer);
}
}
public class Progam
{
private static Megye Beolvas(string fileNev)
{
using (StreamReader reader = new StreamReader(fileNev))
{
string[] elso = reader.ReadLine().Split();
int n = int.Parse(elso[0]);
int t = int.Parse(elso[1]);
Megye regiok = new Megye(n, t);
for (int i = 1; i <= n; i++) {
string[] sor = reader.ReadLine().Split();
int x = int.Parse(sor[0]);
int y = int.Parse(sor[1]);
regiok.UjTelepules(new Telepules(x, y));
}
return regiok;
}
}
public static void Main(string[] args)
{
Megye regiok = Beolvas("regio.be8");
regiok.Kiir(Console.Out);
Console.ReadLine();
}
}
}