题意:
一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右都将改变颜色);
给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要染几次? 若 不能 染成 输出 inf。
高斯消元,写得很懵逼。慢慢理解orz。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #define Inf 0x3fffffff 8 #define maxn 300 9 using namespace std; 10 int n; 11 int a[maxn][maxn]; //增广矩阵 12 int x[maxn]; //解集 13 int free_x[maxn]; //标记是否为不确定的变元 14 void init(){ 15 memset(a,0,sizeof(a)); 16 memset(x,0,sizeof(x)); 17 memset(free_x,1,sizeof(free_x)); 18 for (int i=0;i 0) a[(i-1)*n+j][t]=1; 23 if (i 0) a[i*n+j-1][t]=1; 25 if (j abs(a[max_r][now])) max_r=i; 43 } 44 if (max_r!=k){ //与第i行交换 45 for (j=k;j<=var;j++) swap(a[k][j],a[max_r][j]); 46 } 47 if (a[k][now]==0){ // 说明该now列第k行以下全是0了,则处理当前行的下一列. 48 k--; 49 free_x[num++]=now; 50 continue; 51 } 52 for (i=k+1;i >=1; 73 } 74 for (j=k-1;j>=0;j--){ 75 int tmp=a[j][var]; 76 for (int l=j+1;l > t; 89 string str; 90 while (t--){ 91 cin >> n; 92 init(); 93 for (int i=0;i > str; 95 for (int j=0;j