您的位置:首页 > 其它

POJ 2345 Central heating 高斯消元

2016-07-18 09:03 357 查看
n个人n个开关,每个人可以开或者关一些开关,选出一部分人,使得所有的开关都是开的。
package fd;

import java.util.Scanner;

public class Main {

static void rank(int[][] A, int m, int n)
{
int i = 0, j = 0, k, r, u;
while(i < m && j < n)
{
r = i;
for(k = i; k < m; k++)
if(A[k][j] == 1)
{
r = k;
break;
}
if(A[r][j] == 1)
{
if(r != i)
for(k = 0; k <= n; k++) {
int tmp = A[r][k];
A[r][k] = A[i][k];
A[i][k] = tmp;
}
for(u = i+1; u < m; u++)
if(A[u][j] == 1)
for(k = i; k <= n; k++)
A[u][k] ^= A[i][k];
i++;
}
j++;
}
for(i = m-1; i >= 0; i--) {
for(j = i-1; j >=0; j--) {
A[j]
^= (A[i]
&A[j][i]);
}
}
int tmp = 0;
for(i = 0; i < m; i++) {
if(A[i]
== 1) {
if(tmp++ > 0) {
System.out.print(" ");
}
System.out.print(i+1);
}
}
if(tmp == 0) {
System.out.print("No solution");
}
System.out.println();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] a = new int[n+1][n+2];
for(int i = 0; i < n; i++) {
int t;
while(sc.hasNext()) {
t = sc.nextInt();
if(t == -1) {
break;
}
a[t-1][i] = 1;
}
a[i]
= 1;
}
rank(a, n, n);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: