uva387 A Puzzling Problem

阅读: 评论:0

uva387 A Puzzling Problem

uva387 A Puzzling Problem

不知道为什么提交就是Presentation error,output函数改来改去提交N遍最后居然AC了,但是都不记得是哪份代码AC了。。总之算法是正确的。。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_SIZE 100
typedef struct _node
{int width;int high;
}NODE;
NODE	desc[16];//描述物块的宽度高度
int martix[4][4];
int result[MAX_SIZE][4][4];
int	piece[16][4][4];//储存物块
int N;//物块数
int num;//难题数
int find;//是否找到void input()
{int r,c,i,j,n;char s[5];for(n=0; n<N; n++){scanf("%d %d", &r,&c);for(i=0; i<r; i++){scanf("%s", s);for(j=0; j<c; j++)if(s[j]=='1')piece[n][i][j]=n+1;}desc[n].width	= c;desc[n].high	= r;}
}
//定义一个矩阵间的异或操作,cur为物块号从0开始
int XOR(int cur,int row,int col)
{int i,j;for(i=0; i<desc[cur].high; i++)for(j=0; j<desc[cur].width; j++){martix[row+i][col+j]^=piece[cur][i][j];}return 0;
}
//检测cur号物块是否能在row,col处放置
int check(int cur,int row,int col)
{int i,j;if(4-col<desc[cur].width)	return 0;if(4-row<desc[cur].high)	return 0;for(i=0; i<desc[cur].high; i++)for(j=0; j<desc[cur].width; j++){if(piece[cur][i][j]!=0)if(martix[row+i][col+j]!=0)return 0;}return 1;
}
void solve(int cur)
{int i,j,row,col;if(cur==N){for(i=0; i<4; i++)for(j=0; j<4; j++)if(martix[i][j]==0)return;memcpy(result[num], martix, sizeof(martix));find=1;return;}for(i=0; i<4; i++)for(j=0; j<4; j++){if(!find&&check(cur,i,j)){XOR(cur,i,j);//放置木块solve(cur+1);//去放置下一块XOR(cur,i,j);//恢复到放置前}}
}
void output()
{int i,j,k;for(i=0; i<num; i++){if(result[i][0][0]==0)printf("No solution possible");elsefor(j=0; j<4; j++){for(k=0; k<4; k++)printf("%c", result[i][j][k]+'0');if(j!=3)printf("n");}if(i!=num-1)printf("nn");}
}
int main()
{while(scanf("%d",&N)){if(N==0)	break;memset(martix,0,sizeof(martix));memset(piece,0,sizeof(piece));input();find=0;solve(0);if(!find)	memset(result[num], 0, sizeof(martix));//如果没找到则置为0num++;}output();system("pause");return 0;
}


本文发布于:2024-01-28 11:31:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064126817110.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Puzzling   Problem
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23