zoukankan      html  css  js  c++  java
  • nyoj 545 Metric Matrice

    Metric Matrice

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:1

    描述

    Given as input a square distance matrix, where a[i][j] is the distance between point i and point j, determine if the distance matrix is "a  metric" or not.

    A distance matrix a[i][j] is a metric if and only if

        1.  a[i][i] = 0

        2, a[i][j]> 0  if i != j

        3.  a[i][j] = a[j][i]

        4.  a[i][j] + a[j][k] >= a[i][k]  i ¹ j ¹ k

    输入

    The first line of input gives a single integer, 1 ≤ N ≤ 5, the number of test cases. Then follow, for each test case,
    * Line 1: One integer, N, the rows and number of columns, 2 <= N <= 30
    * Line 2..N+1: N lines, each with N space-separated integers 
    (-32000 <=each integer <= 32000).

    输出

    Output for each test case , a single line with a single digit, which is the lowest digit of the possible facts on this list:
    * 0: The matrix is a metric
    * 1: The matrix is not a metric, it violates rule 1 above
    * 2: The matrix is not a metric, it violates rule 2 above
    * 3: The matrix is not a metric, it violates rule 3 above
    * 4: The matrix is not a metric, it violates rule 4 above

    样例输入

    2

    4

    0 1 2 3

    1 0 1 2

    2 1 0 1

    3 2 1 0

    2

    0 3

    2 0

    样例输出

    0

    3

    #include<stdio.h>
    #include<string.h>
    int x[35][35];
    void slove(int n)
    {
    	for(int i=0;i<n;++i) 
    	{
    		if(x[i][i]!=0)
    		{
    			printf("1
    ");
    			return;
    		}
    	}
    	for(int i=0;i<n;++i)
    	{
    		for(int j=0;j<n;++j)
    		{
    			if(i!=j&&x[i][j]<=0)
    			{
    				printf("2
    ");
    				return;
    			}
    		}
    	}
    	for(int i=0;i<n;++i)
    	{
    		for(int j=0;j<n;++j)
    		{
    			if(i!=j&&x[i][j]!=x[j][i])
    			{
    				printf("3
    ");
    				return;
    			}
    		}
    	}
    	for(int i=0;i<n;++i)
    	{
    		for(int j=0;j<n;++j)
    		{
    			for(int k=0;k<n;++k)
    			{
    				if(i!=j&&j!=k&&i!=k&&x[i][j]+x[j][k]<x[i][k])
    				{
    					printf("4
    ");
    					return ; 
    				}
    			}
    		}
    	}
    	printf("0
    ");
    }
    int main()
    {
    	int t,n;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=0;i<n;++i)
    		{
    			for(int j=0;j<n;++j)
    			{
    				scanf("%d",&x[i][j]);
    			}
    		}
    		slove(n);
    	}
    	return 0;
    } 
    

      

  • 相关阅读:
    还记得吗
    PAT A 1065. A+B and C (64bit) (20)
    畅通project(杭电1863)
    cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&amp;属性--解析csv配置文件
    热烈祝贺Polymer中文组织站点上线
    具体解释HTML中的window对象和document对象
    oc15--文档安装
    oc14--匿名对象
    oc13--pragma mark
    oc12--对象作为参数
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7057730.html
Copyright © 2011-2022 走看看