You are given a complete undirected graph. For each pair of vertices you are given the length of the edge that connects them. Find the shortest paths between each pair of vertices in the graph and return the length of the longest of them.
The first line of the input contains a single integer N (3 ≤ N ≤ 10).
The following N lines each contain N space-separated integers. jth integer in ith line aij is the length of the edge that connects vertices iand j. aij = aji, aii = 0, 1 ≤ aij ≤ 100 for i ≠ j.
Output the maximum length of the shortest path between any pair of vertices in the graph.
3 0 1 1 1 0 4 1 4 0
2
4 0 1 2 3 1 0 4 5 2 4 0 6 3 5 6 0
5
You're running short of keywords, so you can't use some of them:
define do for foreach while repeat until if then else elif elsif elseif case switch
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<math.h> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; int n; int QAQ; int a[12][12]; bool read(int i, int j) { scanf("%d", &a[i][j]); j < n&&read(i, j + 1); j == n&&i < n&&read(i + 1, 1); return 1; } bool floyd(int k, int i, int j) { k < n&&i == n&&j == n&&floyd(k + 1, 1, 1); i < n&&j == n&&floyd(k, i + 1, 1); j < n&&floyd(k, i, j + 1); a[i][j] = min(a[i][j], a[i][k] + a[k][j]); return 1; } int ans; bool update(int i, int j) { ans = max(ans, a[i][j]); j < n&&update(i, j + 1); j == n&&i < n&&update(i + 1, 1); return 1; } int main() { scanf("%d", &n); read(1, 1); floyd(1, 1, 1); ans = 0; update(1, 1); printf("%d\n", ans); return 0; } /* 在define语句中,\可以断2行,可以更方便地AC */