Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <algorithm>
- using namespace std;
- typedef struct osoba {
- int number;
- int stopien;
- } typ;
- int oblicz_stopien(int macierz[], int vert, typ wierzcholek[]) {
- int max = 0;
- int sum = 0;
- for (int i = 0; i < vert; i++) {
- for (int j = 0; j < vert; j++) {
- sum += macierz[i*vert + j];
- }
- wierzcholek[i].number = i;
- wierzcholek[i].stopien = sum;
- if (sum > max)
- max = sum;
- sum = 0;
- }
- return max;
- }
- void sort_stopien(int vert, typ wierzcholek[])
- {
- int a, b;
- for (int i = 0; i < vert; i++)
- {
- for (int j = 0; j < vert - 1; j++)
- {
- if (wierzcholek[j].stopien < wierzcholek[j + 1].stopien) {
- a = wierzcholek[j].number;
- wierzcholek[j].number = wierzcholek[j + 1].number;
- wierzcholek[j + 1].number = a;
- b = wierzcholek[j].stopien;
- wierzcholek[j].stopien = wierzcholek[j + 1].stopien;
- wierzcholek[j + 1].stopien = b;
- }
- }
- }
- }
- int assign_colors(int arr[], int vert, typ wierzcholek[]) {
- int* colors;
- int end = 0;
- colors = new int[vert];
- for (int i = 0; i < vert; i++)
- colors[i] = 0;
- colors[wierzcholek[0].number] = 1;
- for (int i = 1; i < vert; i++) {
- int x = wierzcholek[i].number;
- for (int j = 1; j <= vert; j++) {
- for (int k = 0; k < vert; k++) {
- if (arr[x*vert + k] == 1 && colors[k] == j) break;
- else if (k == vert - 1) {
- colors[x] = j;
- end = 1;
- }
- }
- if (end == 1) {
- end = 0;
- break;
- }
- }
- }
- int max = 0;
- for (int i = 0; i < vert; i++) {
- if (colors[i] > max)
- max = colors[i];
- }
- delete[] colors;
- return max;
- }
- int main() {
- typ* wierzcholek;
- int reps, vert;
- string mat;
- cin >> reps;
- for (int i = 0; i < reps; i++) {
- int* arr;
- cin >> vert;
- cin >> mat;
- arr = new int[vert*vert];
- wierzcholek = new typ[vert];
- for (int j = 0; j < vert*vert; j++) {
- if (mat[j] == '0')
- arr[j] = 0;
- else
- arr[j] = 1;
- }
- int rank, chrom;
- rank = oblicz_stopien(arr, vert, wierzcholek);
- sort_stopien(vert, wierzcholek);
- chrom = assign_colors(arr, vert, wierzcholek);
- if (chrom > rank) cout << "True" << endl;
- else cout << "False" << endl;
- delete[] arr;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement