PMedlem sedan jan. 20012 204 inlägg 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... :(
Peter SMedlem sedan dec. 20025 483 inlägg 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!
}
PMedlem sedan jan. 20012 204 inlägg
Peter S skrev:
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?
Peter SMedlem sedan dec. 20025 483 inlägg Nej, det är inte AMPL-kod. Jag har själv aldrig använt det språket, utan koden ovan var endast tänkt som pesudokod på ditt problem. :)
PMedlem sedan jan. 20012 204 inlägg
Peter S skrev:
Nej, det är inte AMPL-kod. Jag har själv aldrig använt det språket, utan koden ovan var endast tänkt som pesudokod på ditt problem. :)
:) Tack för svaret då, tyvärr så löser det nog inte "mitt" problem så får väl jobba vidare...
DannyMedlem sedan juli 200412 913 inlägg 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;
/red: lagt till lite
PMedlem sedan jan. 20012 204 inlägg 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
PMedlem sedan jan. 20012 204 inlägg Får väl markera som klart, hittade en lösning som jag kanske kan använda mig av på https://www.ampl.com .