lang mac_ code

 avatar
unknown
plain_text
2 years ago
2.0 kB
5
Indexable
#include <iostream>
using namespace std;
int in[500][500];
int backup[500][500];
int Qx[250000];
int r = -1, f = -1;
int n;
int visit[500];
void push(int x){
	r++;
	Qx[r] = x;

}
void pop(int &x){
	f++;
	x = Qx[f];

}
void reset_in(){
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            in[i][j] = backup[i][j];
        }
        
    }
    
}
void reset_visit(){
    for(int i = 1; i <= n; i++){
        visit[i] = 0;
    }
}
void BFS(int x){
	r = -1;
	f = -1;
	push(x);
	visit[x] = 1;
	while (r != f){
		pop(x);
		for(int j = 1; j <= n; j++){
			if(in[x][j] == 1 && visit[j] == 0){
				push(j);
				visit[j] = 1;
			}
		}
	}
}
bool BFS_cau(int i, int j){
    r = -1;
    f = -1;
    reset_visit();
    push(i);
    visit[i] = 1;
    while(r != f){
        pop(i);
        for(int k = 1; k <= n; k++){
            if(in[i][k] == 1 && visit[k] == 0){
                if(k  == j) {return false;}
                push(k);
                visit[k] = 1;
            }
        }
        
    }
    return true;
}
int main(){
	freopen("input.txt","r",stdin);
	int T;
	cin >> T;
	for(int tc = 1; tc <= T; tc++){
		cin >> n;
		reset_visit();
		int lang = 0;
		for(int i = 1; i <= n; i++){
			int dem = 0;
			for(int j = 1; j <= n; j++){
				cin >> in[i][j];
				backup[i][j] = in[i][j];
				if (in[i][j] == 0) dem++;
			}
			if(dem == n) {
				lang++;
				visit[i] = 1;
			}
		}
		int vung = lang;
		for(int i = 1; i <= n ; i++){
			if(visit[i] == 0){
				BFS(i);
				vung++;
			}		
		}
		// Tinh so cau
		int cau = 0;
		for(int i = 1; i <= n; i++){
		    for(int j = i; j <= n; j++){
		        reset_in();
		        if(in[i][j] == 1){
		            in[i][j] = 0;
		            in[j][i] = 0;
		            if(BFS_cau(i,j)) cau++; 
		        }
		    }
		}
		cout << vung << " " << lang << " " << cau << endl;

	}
	return 0;
}
Editor is loading...