Har en variabel matris på formen [a,b]. Som är 10x5, alltså 10 rader och 5 kolumner( om det nu är tvärtom man skriver). Med 1/0 som möjliga värden.
Skulle vilja sätta upp en villkorssumma som kontrollerar så att minst 7 av raderna i varje kolumn innehåller en 1:a och att dessa är i följd. Sliter mitt hår... :(
Om vi antar att raderna ligger i den första dimensionen:
int total = 0;
for (int i = 0; i < 5; ++i){
int j = 0;
while (j < 10 && arr[j++][i] != 1);
// we might have found the first '1'
// now, if the position j is greater than 3, 7 straight 1's cannot be found and thus we exit
if (j > 3){
// take appropriate action
exit;
}
// so we're at a 1, let's count 'em!
--j; // make sure we get the first finding
int count = 0;
while (arr[j++][i] == 1) ++count;
if (count < 7){ // number of 1's less than 7
exit;
} else { ++total; }
}
if (total == 5){
// happy!
}
Om vi antar att raderna ligger i den första dimensionen:
int total = 0;
for (int i = 0; i < 5; ++i){
int j = 0;
while (j < 10 && arr[j++][i] != 1);
// we might have found the first '1'
// now, if the position j is greater than 3, 7 straight 1's cannot be found and thus we exit
if (j > 3){
// take appropriate action
exit;
}
// so we're at a 1, let's count 'em!
--j; // make sure we get the first finding
int count = 0;
while (arr[j++][i] == 1) ++count;
if (count < 7){ // number of 1's less than 7
exit;
} else { ++total; }
}
if (total == 5){
// happy!
}
Är detta verkligen AMPL-kod? får en hel del kompileringsfel när jag försöker köra den. Sen skulle jag helst vilja använda mig av en linjär lösningsmetod (lp-solve) och då använder man sig av "subject to ..." för att ange villkor, känns som om man skulle använda koden ovan så skulle det inte bli linjärt, eller har jag fel?
Du håller inte på att göra en Sudoku lösare som jag?! Isåfall har jag en bra pascal-sats:
// Kollar om Num existerar på kolumnen
function ExistsInCol(Num, Col: ShortInt): Boolean;
var Row : ShortInt;
NumString : ShortString;
begin
NumString := IntToStr(Num);
Result := False;
For Row := 0 to 8 do
If StringGrid1.Cells[Col,Row] = NumString Then
Begin
Result := True;
Exit;
End Else
Result := False;
end;
Sedan har jag en likadan nästan som kör Radvis. En som kollar om siffran finns i 3x3 rutan. Sedan körs dessa procedurer nästlade på följande vis:
For Col := 0 to 8 Do
For Rad := 0 to 8 Do
For Num := 1 to 9 Do
Begin
ExistsInCol(Num,Col);
ExistsInRow(Num,Row);
ExistsInRegion(Num,Col,Row);
End;
Tyvärr inte håller på och försöker optimera ett schema, 1 symboliserar att man jobbar och 0 att man är ledig men jag vill inte ha några 0:or bland 1:orna utan jag vill att man ska arbeta konstant utan uppehåll under en dag. Så själva koden att kontrollera det i efterhand är inga problem utan det är just att sätta upp det villkoret som strular, så att det kommer med under genereringen