POJ 1046 Color Me Less(水~)

Description
先给出16个点坐标,然后给出一些点,问这个点与已给出16个点中哪个点距离最小
Input
首先输入16点的坐标Xi,Yi,Zi(i=0,1,..16),然后输入多个查询点点坐标,以-1 -1 -1结束输入
Output
对每个查询点,找出16个点中哪个点与其距离最短,若有多个点满足条件,输出先满足条件的点
Sample Input
0 0 0
255 255 255
0 0 1
1 1 1
128 0 0
0 128 0
128 128 0
0 0 128
126 168 9
35 86 34
133 41 193
128 0 128
0 128 128
128 128 128
255 0 0
0 1 0
0 0 0
255 255 255
253 254 255
77 79 134
81 218 0
-1 -1 -1
Sample Output
(0,0,0) maps to (0,0,0)
(255,255,255) maps to (255,255,255)
(253,254,255) maps to (255,255,255)
(77,79,134) maps to (128,128,128)
(81,218,0) maps to (126,168,9)
Solution
水题一道,先暴搜找出最小值,再搜一遍找到第一个最小值输出即可
Code

#include<stdio.h>
#define min(x,y) x<y?x:y

int main()
{
    int g[50][3],i=0,j,min,a,b,c;
    for(i=0;i<16;i++)
        for(j=0;j<3;j++)
            scanf("%d",&g[i][j]);
    scanf("%d%d%d",&a,&b,&c);
    while(!(a==-1&&b==-1&&c==-1))
    {
        min=10000000;
        for(i=0;i<16;i++)//找出最小值 
            min=min(min,((a-g[i][0])*(a-g[i][0])+(b-g[i][1])*(b-g[i][1])+(c-g[i][2])*(c-g[i][2])));
        for(i=0;i<16;i++)//输出第一个最小值 
            if(min==(a-g[i][0])*(a-g[i][0])+(b-g[i][1])*(b-g[i][1])+(c-g[i][2])*(c-g[i][2]))    
            {
                printf("(%d,%d,%d) maps to (%d,%d,%d)\n",a,b,c,g[i][0],g[i][1],g[i][2]);
                break;
            }
        scanf("%d%d%d",&a,&b,&c);           
    } 
} 

你可能感兴趣的:(POJ 1046 Color Me Less(水~))