还没写完,先晾在这边
#include<stdio.h>
int row_len;
int column_len;
int arr[1000][1000];
void start();
void show();
void init();
int max(int n1,int n2);
int min(int n1,int n2);
struct Point {
int x;
int y;
};
struct Point p1;
struct Point p2;
struct Point p3;
struct Point p;
struct Point temp;
int isSameLine(struct Point pi1,struct Point pi2);
int isSingleBrokenLine(struct Point pi1,struct Point pi2);
int horizonVerify();//水平判定
int docheck(struct Point pi1,struct Point pi2);
void getPoint(struct Point p1, struct Point p2);
void main(){
start();
while(1){
docheck(p1,p2);
}
}
void start(){
printf("难度系数控制\n");
printf("输入行数\n");
scanf("%d",&row_len);
printf("\n输入列数\n");
scanf("%d",&column_len);
if(column_len%2!=0){
printf("请保证输入的列数是偶数\n");
exit();
}
init();
show();
}
void getPoint(){
printf("输入第一点的坐标x\n");
scanf("%d",&p1.x);
printf("输入第一点的坐标y\n");
scanf("%d",&p1.y);
printf("输入第二点的坐标x\n");
scanf("%d",&p2.x);
printf("输入第二点的坐标y\n");
scanf("%d",&p2.y);
}
int docheck(struct Point pi1,struct Point pi2){
printf("输入第一点的坐标x\n");
scanf("%d",&pi1.x);
printf("输入第一点的坐标y\n");
scanf("%d",&pi1.y);
printf("输入第二点的坐标x\n");
scanf("%d",&pi2.x);
printf("输入第二点的坐标y\n");
scanf("%d",&pi2.y);
printf("%d=%d\n",pi1.x,pi1.y);
if(arr[pi1.y][pi1.x]==arr[pi2.y][pi2.x]){
if(isSameLine(pi1,pi2)||isSingleBrokenLine(pi1,pi2)){
arr[pi1.y][pi1.x]=0;
arr[pi2.y][pi2.x]=0;
}
show();
}else{
printf("两点值不同");
}
}
int max(int n1,int n2){
if(n1>n2){
return n1;
}
return n2;
}
int min(int n1,int n2){
if(n1<n2){
return n1;
}
return n2;
}
/*
直线连通
*/
int isSameLine(struct Point p1,struct Point p2){
int min_y;
int max_y;
int min_x;
int max_x;
int i;
if(p1.x==p2.x){
min_y=min(p1.y,p2.y);
max_y=max(p2.y,p1.y);
for(i=min_y+1;i<max_y;i++){
if(arr[i][p1.x]!=0){
return 0;
}
}
if(i==max_y){
return 1;
}
}else if(p1.y==p2.y){
min_x=min(p1.x,p2.x);
max_x=max(p1.x,p2.x);
for(i=min_x+1;i<max_x;i++){
if(arr[p1.y][i]!=0){
return 0;
}
}
if(i==max_x){
return 1;
}
}
return 0;
}
int isSingleBrokenLine(struct Point pi1,struct Point pi2){
int min_x;
int max_x;
int min_y;
int max_y;
int flag;
int flag1;
int i;
int j;
min_x=min(pi1.x,pi2.x);
max_x=max(pi1.x,pi2.x);
min_y=min(pi1.y,pi2.y);
max_y=max(pi1.y,pi2.y);
temp.x=min_x;
temp.y=min_y;
/*
一拐点
*/
if((temp.x==pi1.x && temp.y==pi1.y)|| (temp.x==pi2.x && temp.y==pi2.y)){
flag=1;
/*
左右两拐点都不为零的就返回零
*/
if(arr[max_y][min_x]!=0 && arr[min_y][max_x]!=0){
return 0;
}else if(arr[max_y][min_x]==0){//拐点为零
for(i=min_y+1;i<max_y;i++){
if(arr[i][min_x]!=0){
flag=0;
break;
}
if(flag){
for(j=min_x+1;j<max_x;j++){
if(arr[max_y][j]!=0){
flag=0;
break;
}
}
}
}
if(flag){
return 1;
}
}else if(arr[min_y][max_x]==0){
for(i=min_y+1;i<max_y;i++){
if(arr[i][max_x]!=0){
flag=0;
break;
}
if(flag){
for(j=min_x+1;j<max_x;j++){
if(arr[min_y][j]!=0){
flag=0;
break;
}
}
}
}
if(flag){
return 1;
}
}
}else if(pi1.x!=pi2.x&&pi1.y!=pi2.y){
flag1=1;
if(arr[min_y][min_x]!=0 && arr[max_y][max_x]!=0){
return 0;
}else if(arr[min_y][min_x]==0){
for(i=min_y+1;i<max_y;i++){
if(arr[i][min_x]!=0){
flag1=0;
break;
}
if(flag1){
for(j=min_x+1;j<max_x;j++){
if(arr[min_y][j]!=0){
flag1=0;
break;
}
}
}
}
if(flag1){
return 1;
}
}else if(arr[max_y][max_x]==0){
for(i=min_y+1;i<max_y;i++){
if(arr[i][max_x]!=0){
flag1=0;
break;
}
if(flag1){
for(j=min_x+1;j<max_x;j++){
if(arr[max_y][j]!=0){
flag1=0;
break;
}
}
}
}
if(flag1){
return 1;
}
}
}
return 0;
}
int horizonVerify(){
int i;
/*
循环列
*/
for(i=0;i<column_len;i++){
if(i!=p1.x && arr[p1.y][i]){
p.y=p1.y;
p.x=i;
/* if(isSingleBrokenLine()&&isSingleBrokenLine()){
}*/
}
}
}
void init(){
int i;
int j;
int z;
int value;
for(i=1;i<row_len-1;i++){
for(j=1;j<column_len-1;j+=2){
value=rand()%9+1;
arr[i][j]=value;
arr[i][j+1]=value;
}
}
//随机交换
for(z=0;z<column_len*row_len;z++){
int x1;
int y1;
int x2;
int y2;
int temp;
temp=0;
x1=0;
y1=0;
x2=0;
y2=0;
while(x1==0){
x1=rand()%(column_len-1);
}
while(x2==0){
x2=rand()%(column_len-1);
}
while(y1==0){
y1=rand()%(row_len-1);
}
while(y2==0){
y2=rand()%(row_len-1);
}
//printf("%d,%d",x1,y1);
temp=arr[y1][x1];
arr[y1][x1]=arr[y2][x2];
arr[y2][x2]=temp;
}
}
void show(){
int i;
int j;
int k;
printf(" ");
for(i=1;i<column_len-1;i++){
printf("*%d*",i);
}
printf("\n");
for(j=0;j<row_len;j++){
if(j!=0 && j!=row_len-1 ){
printf("%d",j);
}else{
printf(" ");
}
for(k=0;k<column_len;k++){
printf(" %d ",arr[j][k]);
}
printf("\n");
}
}