首页 金币c语言程序设计,C语言金币阵列问题解决方法

金币c语言程序设计,C语言金币阵列问题解决方法

举报
开通vip

金币c语言程序设计,C语言金币阵列问题解决方法 &nbsh1;   金币c语言程序设计,C语言金币阵列问题解决方法     本文实例详细讲述了C语言实现金币阵列问题的解决方法,分享给大家供大家参考。具体方法如下: 问题描述: 有m*n(1 ≤ m, n ≤ 100)个金币在桌面上排成一个 m 行 n 列的阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。 金币阵列游戏的规则是...

金币c语言程序设计,C语言金币阵列问题解决方法

&nbsh1;

 

金币c语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ,C语言金币阵列问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 解决方法

 

 

本文实例详细讲述了C语言实现金币阵列问题的解决方法,分享给大家供大家参考。具体方法如下:

问题描述:

有m*n(1 ≤ m, n ≤ 100)个金币在桌面上排成一个 m 行 n 列的阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。

金币阵列游戏的规则是:

1. 每次可将任一行金币翻过来放在原来的位置上;

2. 每次可任选 2 列,交换这 2 列金币的位置。

本题要求对于给定的金币阵列初始状态和目标状态,编程计算按金币游戏规则,将金币阵列从初始状态变换到目标状态所需的最少变换次数。

数据输入:

输入的测试数据的第一行是一个不超过 10 的正整数 k,表示有 k 个测试用例. 每个测试用例的第一行是两个正整数 m, n. 接下来是 m 行,每行有 n 个用空白符分隔的 0 或 1. 这 m*n 个 0-1 表示金币的初始状态阵列。最后是 m 行,每行 n 个 用空白符分隔的 0 或 1,表示金币阵列的目标状态。

数据输出:

对于每个测试用例,输出一行包含一个整数,表示按照要求规则将金币阵列从初始状态变换为目标状态所需要的最少变换次数。如果不能按照变换规则将初始状态变换为目标状态(即无解时)则输出 -1。

数据样例:

Sample Input

2

4 3

1 0 1

0 0 0

1 1 0

1 0 1

1 0 1

1 1 1

0 1 1

1 0 1

4 3

1 0 1

0 0 0

1 0 0

1 1 1

1 1 0

1 1 1

0 1 1

1 0 1

Sample Output

2

-1

C语言实现代码如下:

#include "stdio.h"

#include "stdlib.h"

#define size 100

int num; //输入几组数据

int row; //行数

int column; //列数

int count; //交换次数

int min;

int a[size][size]; //初始矩阵

int b[size][size]; //最终矩阵

int c[size][size]; //临时存放矩阵

int found; //初始到最终是否有交换

void trans_row(int x) // 第x行取反

{

int i;

for (i = 0;i

b[x][i] = b[x][i]^1; // 异或取反

count++;

}

void trans_column(int x, int y) // 交换x和y列

{

int i;

int temp;

for(i = 0; i < row; i++){

temp=b[i][x];

b[i][x]=b[i][y];

b[i][y]=temp;

}

if (x != y)

count++;

}

int is_same(int x, int y) //比较x和y列是否相同

{

int i;

for(i = 0; i

if (a[i][x] != b[i][y])

return 0;

return 1;

}

void copy(int a[size][size], int b[size][size]) // 拷贝数组

{

int i,j;

for (i = 0; i

for (j = 0; j < column; j++)

a[i][j] = b[i][j];

}

int main(){

int i,j,k,p;

int exchgmin[size];

scanf("%d",&num);

for(i=0;i

scanf("%d",&row);

scanf("%d",&column);

for(j=0;j

for(k=0;k

scanf("%d",&a[j][k]);

for(j=0;j

for(k=0;k

scanf("%d",&b[j][k]);

copy(c,b); //保护原始数组b

min=row+column+1;

for(j=0;j

copy(b,c); //恢复原始数组b

count=0; //交换次数清零

trans_column(0,j); //把每一列都假设成为第一列的目标状态,穷举这column中情况

for(k=0;k

if(a[k][0]!=b[k][0])

trans_row(k);

}

for(k=0;k

found=0;

for(p=k;p

if(is_same(k,p)){

trans_column(k,p);

found=1;

break;

本文档为【金币c语言程序设计,C语言金币阵列问题解决方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
永兴文档
暂无简介~
格式:doc
大小:21KB
软件:Word
页数:12
分类:互联网
上传时间:2023-06-29
浏览量:1