Tam kod aşağıda görülebilir. Nedense tam çalışmadı, bu msvc uzantısı olan monoD ile de debug edemedim. Ordan buraya sıplıyor debugger hiç bir şey anlamadım.DFS fonksiyonunda sadece sütün sayısı kadar for loop dönüyor. Dışardaki loop dönmüyor.
Tam soru şu idi : http://codeforces.com/contest/828/problem/B
import std.stdio;
import std.string;
import std.algorithm;
import std.conv;
import std.array;
import std.range;
import std.math;
int toplamSatir;
int toplamSutun;
dchar[][] kagitElemanlari;
struct BaglantiliElemanlar
{
this( dchar[][] ikiboyutluVeriYapisi )
{
m_veriYapisi = ikiboyutluVeriYapisi;
DFS(0, 0);
}
void DFS ( int satir, int sutun )
{
if( satir < 0 || sutun < 0 )
return;
for ( ; satir < m_veriYapisi.length ; satir++ ) // Bu for loop dönmüyor. sanki
{
for ( ; sutun < m_veriYapisi[satir].length; sutun++ )
{
Isle( satir, sutun, m_veriYapisi.length, m_veriYapisi[satir].length );
}
}
}
void Isle( int satir, int sutun, ulong maxSatir, ulong maxSutun )
{
writeln( satir, sutun, maxSatir, maxSutun);
if( satir < 0 || sutun < 0 || satir >= maxSatir || sutun >= maxSutun )
return;
if ( m_veriYapisi[satir][sutun] == 'B' )
{
m_veriYapisi[satir][sutun] = 'W';
m_geciciSonuc.Isle(satir, sutun );
Isle(satir-1,sutun-1, maxSatir, maxSutun);
Isle(satir,sutun-1, maxSatir, maxSutun);
Isle(satir+1,sutun-1, maxSatir, maxSutun);
Isle(satir-1,sutun, maxSatir, maxSutun);
Isle(satir+1,sutun, maxSatir, maxSutun);
Isle(satir-1,sutun+1, maxSatir, maxSutun);
Isle(satir,sutun+1, maxSatir, maxSutun);
Isle(satir-1,sutun+1, maxSatir, maxSutun);
}
else
{
if ( m_geciciSonuc.DolulukSayisi )
m_sonuclar ~= m_geciciSonuc;
m_geciciSonuc.Resetle();
}
}
SiyahKareAdayi m_geciciSonuc;
SiyahKareAdayi[] m_sonuclar;
dchar[][] m_veriYapisi;
}
struct SiyahKareAdayi
{
int MaxY;
int MinY;
int MaxX;
int MinX;
int DolulukSayisi;
this( int dolulukSayisi )
{
DolulukSayisi = dolulukSayisi;
}
void Resetle()
{
this = SiyahKareAdayi();
}
void Isle( int satir, int sutun )
{
DolulukSayisi++;
MaxY = max( sutun, MaxY);
MinY = min( sutun, MinY);
MaxX = max( satir, MaxX);
MinX = min( satir, MinX);
}
int BoslariBul()
{
int kareKenarUzunlugu = max(MaxX-MinX, MaxY-MinY);
int kareAlani = kareKenarUzunlugu*kareKenarUzunlugu;
return kareAlani - DolulukSayisi;
}
bool KareOlusturalabilirmi( int xMax, int yMax )
{
int xUzunlugu = MaxX-MinX;
int yUzunlugu = MaxY-MinY;
if ( xUzunlugu > yUzunlugu )
{
return yMax >= xUzunlugu;
}
else
{
return xMax >= yUzunlugu;
}
}
}
void main()
{
auto kagitBoyutlari = stdin.readln.strip.split().map!(a => to!int(a)).array();
toplamSatir = kagitBoyutlari[0];
toplamSutun = kagitBoyutlari[1];
kagitElemanlari = stdin
.byLine()
.take(toplamSatir)
.map!(line => line
.map!(a => to!dchar(a))
.array())
.array;
writeln(kagitElemanlari);
BaglantiliElemanlar baglantiliElemCozucu = BaglantiliElemanlar(kagitElemanlari);
bool kareOlusturmaSorunlumu = baglantiliElemCozucu.m_sonuclar.any!(a => a.KareOlusturalabilirmi(toplamSatir, toplamSutun) == false );
if ( kareOlusturmaSorunlumu )
writeln(-1);
int sonuc;
baglantiliElemCozucu.m_sonuclar.each!( a => sonuc += a.BoslariBul() );
writeln( sonuc );
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]