poj 1681
来源:互联网 发布:.com域名注册备案 编辑:程序博客网 时间:2024/05/16 17:00
题目意思很简单,很poj 1222其实是一模一样的,只是要会判断是否存在无解的情况。当用高斯法化简了矩阵以后,再答案矩阵的那部分若有值不为0,则无解(具体原来可以见czyuan神的blog或者去看看线性代数的相关内容)。若有解,求出解矩阵以后数出其中1的个数即为答案。
以下是详细代码:
#include "stdio.h"#include "string.h"#include "math.h"const int N=300;const int M=300;char array[N][N];int matrix[M][M],ans[M];int dir[4][2]={-1,0,1,0,0,-1,0,1};int n,m;bool check(int x,int y){if(x>=0 && x<m && y>=0 && y<m)return true;else return false;}void solve(){int i,j,k,temp;int row=0,col=0,a,b;int cnt=0;while(row<n && col<n){int id=row;for(i=row+1;i<n;i++)if(fabs(matrix[i][col])>fabs(matrix[id][col]))id=i;if(matrix[id][col]){temp=matrix[id][col];for(i=col;i<=n;i++){k=matrix[id][i];matrix[id][i]=matrix[row][i];matrix[row][i]=k;}for(i=row+1;i<n;i++)if(matrix[i][col]){for(j=col;j<=n;j++)matrix[i][j]^=matrix[row][j];}row++;}col++;}for(i=row;i<n;i++)if(matrix[i][n]){printf("inf/n"); return ;}cnt=matrix[n-1][n];for(i=n-2;i>=0;i--){for(j=i+1;j<n;j++)matrix[i][n]^=(matrix[i][j] && matrix[j][n]);cnt+=matrix[i][n];}printf("%d/n",cnt);}int main(){
int t;scanf("%d",&t);while(t--){int i,j,k;int x,y,a,b;scanf("%d",&m);getchar();n=m*m;memset(matrix,0,sizeof(matrix));for(i=0;i<m;i++)scanf("%s",array[i]);for(i=0;i<m;i++){for(j=0;j<m;j++){a=i*m+j;if(array[i][j]!='y') matrix[a][n]=1;matrix[a][a]=1;for(k=0;k<4;k++){x=i+dir[k][0];y=j+dir[k][1];if(check(x,y)){b=x*m+y;matrix[a][b]=1;}}}}solve();}return 0;}
- poj 1681
- poj 1681
- poj 1681(高斯消元。。。)
- poj 1681 高斯消元
- POJ 1681 (高斯消元)
- poj 1681 画家问题
- POJ 1681 画家问题
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- Java经典算法例题分享
- 在应用图标右上角显示数字
- 用Eclipse开发QT4的C++程序
- 设备控制台的设置配置文件的代码
- 通过反射访问父类的私有方法
- poj 1681
- 分布式计算框架Hadoop
- [对android程序作代码混淆]
- ubuntu10.10上安装Qt4.7 - [Qt]
- sizeof -----------转载
- HDU 1003(Max Sum)解题纠错
- 关于因数分解的计算(淘宝一面试题)
- 用smali实现Android apk的简单汉化
- 解决sqlserver2005新建复制分发时提示找不到服务器错误