SPOJ - Sprawdzanie sudoku (SUDOKUC)

0

Mam problem z tym zadaniem ze SPOJ'a https://pl.spoj.pl/problems/SUDOKUC/, nie wiem czemu nie akceptuje mojego programu, dla danych przykładowych wszystko działa.

Oto kod:

#include <cstdio>

const int r = 9;

int t[r][r];

struct sudoku
{
	int liczba;
	int ile;
};

sudoku s[r];

bool sud();

//----------------------------------------------------------------------

int main()
{
	int D;
	scanf("%d", &D);
	
	while(D--)
	{
		for(int i = 0; i < r; i++)
		{
			
			for(int j = 0; j < r; j++)
			{
				scanf("%d", &t[i][j]);
			}
			
		}
		
		if(sud())
			printf("TAK\n");
		else
			printf("NIE\n");
		
	}
	return 0;
}

//----------------------------------------------------------------------

bool sud()
{
	//sprawdzanie wierszy
	for(int i = 0; i < r; i++)
	{
			
		for(int m = 0; m < r - 1; m++)
		{
				
			for(int n = m + 1; n < r; n++)
			{
					
				if(t[i][m] == t[i][n])
				{
					return false;
				}
				
			}
							
		}
		
	}
	
	//sprawdzanie kolumn
	for(int j = 0; j < r; j++)
	{
			
		for(int m = 0; m < r - 1; m++)
		{
				
			for(int n = m + 1; n < r; n++)
			{
					
				if(t[m][j] == t[n][j])
				{
					return false;
				}
				
			}
							
		}
		
	}
	
	//przypisanie liczb z pierwszej kolumny
	for(int i = 0; i < r; i++)
	{
		s[i].liczba = t[i][0];
		s[i].ile = 0;
	}
	
	//zliczanie ilosci wystapien poszczegolnych liczb
	for(int i = 0; i < r; i++)
	{
			
		for(int j = 0; j < r; j++)
		{
			for(int k = 0; k < r; k++)
			{
				if(s[k].liczba == t[i][j])
				{
					s[k].ile++;
					break;
				}
			}
		}
			
	}
	
	//sprawdzanie ilosci wystapien poszczegolnych liczb
	for(int k = 0; k < r; k++)
	{
		if(s[k].ile != 9)
			return false;
	}
	
	return true;
}

Z góry dzięki

0

poza ograniczeniem na brak powtórzeń w wierszach i kolumnach sudoku ma jeszcze jedno ograniczenie: na brak powtórzeń w określonych kwadratach (i tego nie zrobiłeś).
Te trzy ograniczenia wystarczają nie musisz sprawdzać ile razy wystąpiła dana liczba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1