[C++] Tabela 0\1- jedna wartość w wierszu i kolumnie algorytm
Ostatnio zmodyfikowano 2014-11-08 22:53
scartout Temat założony przez niniejszego użytkownika |
[C++] Tabela 0\1- jedna wartość w wierszu i kolumnie algorytm » 2014-11-07 18:39:34 Witam. Mam taką tablicę: 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 Kombinuję nad algorytmem (bez sukcesów), który zostawi mi tylko jedną 'jedynkę' w każdym wierszu i kolumnie czyli albo 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 albo 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 Jak to napisać? Dotąd napisałem coś takiego, co pomaga pewne 'jedynki' wykreślić ale myślę że nie warto się tym sugerować: for( int j = 0; j < b; j++ ) { h = 0; for( int i = 0; i < a; i++ ) { if( table4[ i ][ j ] == 1 ) { h++; if( h > 1 ) { for( int j = 0; j < b; j++ ) table4[ i ][ j ] = 0; } } } } Najważniejsze: algorytm ma być uniwersalny czyli nie tylko dla tego przykładu. |
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-11-08 18:50:53 Nikt nie ma żadnego pomysłu? :) |
|
1aam2am1 |
» 2014-11-08 19:04:46 bool linia = 0; for( int i = 0; i < a; i++ ) { linia = 0; for( int j = 0; j < b; j++ ) { if( tab[ i ][ j ] == 1 ) { if( linia ) { tab[ i ][ j ] = 0; } else { linia = 1; } } } }
Nie sprawdzałem czy działa. |
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-11-08 20:15:25 Dzięki za odpowiedź! Niestety funkcja nie realizuje planu do końca - zdarza się zwracać dwie ''jedynki'' w tej samej kolumnie za to jedną kolumnę zostawić z ''zerami''. Doprecyzuję, że chodzi konkretnie o takie dopasowanie w pozostawieniu ,,jedynek'' by każda zostawała tylko jedna ,,jedynka'' w danej kolumnie i w danym wierszu, najlepiej sprawdzając czy najpierw te pojedyncze ,,jedynki'' i ewentualnie wracając do tych podwójnych. Ale jak to zapętlić to dla mnie magia :D |
|
1aam2am1 |
» 2014-11-08 20:58:38 Powiem tak jeżeli ta moja funkcja nie działa dla wierszy oznacza to że może działać dla kolumn. Sprawdź. Jeżeli działa spróbuj ją przerobić, bo forum jest od dawania rad a nie kodu. Trzeba nauczyć się myśleć kreatywnie. |
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-11-08 22:53:27 Prawdę mówiąc ciągle walczę, ale już pomysłów brakuje. Nowy kod działa ale nie do końca :
for( int i = 0; i < a; i++ ) { u = 0; v = 0; h = 0; for( int j = 0; j < b; j++ ) { if( table4[ i ][ j ] == 1 ) { h++; if( h > 1 ) table4[ i ][ j ] = 2; } } }
do { for( int j = 0; j < b; j++ ) { h = 0; for( int i = 0; i < a; i++ ) { if( table4[ i ][ j ] == 1 ) h++; if( h > 1 && table4[ i ][ j ] == 1 ) { table4[ i ][ j ] = 0; } } } for( int i = 0; i < a; i++ ) { u = 0; v = 0; for( int j = 0; j < b; j++ ) { if( table4[ i ][ j ] == 1 ) u++; if( table4[ i ][ j ] == 2 ) v++; if( u == 0 && v == 1 && table4[ i ][ j ] == 2 ) table4[ i ][ j ] = 1; } } for( int j = 0; j < b; j++ ) { h = 0; for( int i = 0; i < a; i++ ) { if( table4[ i ][ j ] == 1 ) h++; if( h > 1 ) { table4[ i ][ j ] = 2; } } } f = 0; v = 0; for( int j = 0; j < b; j++ ) { u = 0; h = 0; for( int i = 0; i < a; i++ ) { h++; if( table4[ i ][ j ] == 1 ) u++; if( table4[ i ][ j ] != 1 ) f++; if( h == a && u > 1 ) v++; if( h == a && f == a ) v++; } } } while( v != 0 );
for( int i = 0; i < a; i++ ) { for( int j = 0; j < b; j++ ) { if( table4[ i ][ j ] == 2 ) table4[ i ][ j ] = 0; } }
Działa dla wcześniej podanego przykładu. Ale dla takiego: 0 1 1 0 1 0 0 1 0 0 0 1 1 1 0 1 osiąga wynik: 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 zamiast oczekiwanego: 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 |
|
« 1 » |