Uva 1030 - Image Is Everything

本文介绍了一种通过六个不同视角的投影来判断三维空间中是否存在冲突点的方法,并提供了一个具体的实现代码示例。该方法首先建立空间直角坐标系,然后将六个视角所见的投影映射到坐标系中,以此来确定是否存在冲突。代码实现了这一过程,包括读取输入、投影映射及冲突检查等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法: 建立空间直角坐标系,把六个视角看到的投影到坐标系中,看六个视角看到的是否会有冲突,有冲突代表改点不存在

PS: 某渣实在是不想吐槽了,初始化的是把.写成了*  特么害我一直以为我坐标系建错了,找了好久啊.....(┬_┬)哭了

代码:

#include<stdio.h>
#include<string.h>
#define maxn 12
#define REP(i,n) for(int i= 1; i<= (n); i++)

char view[8][maxn][maxn];
char pos[maxn][maxn][maxn];
int n; 

int get_char()
{
	char ch;
	while(1)
	{
		ch= getchar();
		if( (ch>= 'A' && ch<= 'Z') || ch =='.')
			return ch;
	}
}

void hehe(int k, int i, int j, int len, int &x, int &y, int &z)
{
	if(k == 1){ x= n- len + 1, y= j, z= n- i + 1;}
	if(k == 2){ x= j, y= len, z= n- i + 1;}
	if(k == 3){	x= len, y= n- j+ 1, z= n- i + 1;}
	if(k == 4){ x= n- j+ 1, y= n- len+ 1, z= n- i+ 1;}
	if(k == 5){ x= i, y= j, z= n- len + 1;}
	if(k == 6){ x= n- i +1, y= j, z= len;}
}
//把视图上的点投影到坐标系中 

int main()
{
	while(scanf("%d",&n)!=EOF&&n)
	{
		REP(i,n) REP(k,6) REP(j,n)	
			view[k][i][j]= get_char();
			
		REP(x,n) REP(y,n) REP(z,n)
			pos[x][y][z]= '#';
		REP(k,6) REP(i,n) REP(j,n)
		if(view[k][i][j] == '.')
		REP(p,n)	
		{
			int x, y, z;
			hehe(k, i, j, p, x, y, z);
			pos[x][y][z]= '.'; //之前这里写成了'*',找错找了好久啊 
		}
		
		while(1)
		{
			int flag= 1;
			
			REP(k,6) REP(i,n) REP(j,n)
			if(view[k][i][j]!= '.') 
			REP(p,n)
			{
				int x,y,z;
				hehe(k, i, j, p, x, y, z);
			
				if(pos[x][y][z]!='.')
				{
					if(pos[x][y][z]!= view[k][i][j])
					{
						if(pos[x][y][z] == '#')
							pos[x][y][z]= view[k][i][j];
						else
							pos[x][y][z]= '.';	
						flag= 0;
					} 
					break;	
				}
			}
			if(flag)
				break;
		}
		
		int ans= 0;
		
		REP(i, n) REP(j, n) REP(k, n) 
		if(pos[i][j][k]!='.')
			ans++;		
		printf("Maximum weight: %d gram(s)\n",ans);
	}	
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值