Frogs‘ Neighborhood(POJ 1659 C/C++)
Description
未名湖附近共有N個大小湖泊L1, L2, …, Ln(其中包括未名湖),每個湖泊Li裡住著一隻青蛙Fi(1 ≤ i ≤ N)。如果湖泊Li和Lj之間有水路相連,則青蛙Fi和Fj互稱為鄰居。現在已知每隻青蛙的鄰居數目x1, x2, …, xn,請你給出每兩個湖泊之間的相連關係。
Input
第一行是測試資料的組數T(0 ≤ T ≤ 20)。每組資料包括兩行,第一行是整數N(2 < N < 10),第二行是N個整數,x1, x2,…, xn(0 ≤ xi ≤ N)。
Output
對輸入的每組測試資料,如果不存在可能的相連關係,輸出"NO"。否則輸出"YES",並用N×N的矩陣表示湖泊間的相鄰關係,即如果湖泊i與湖泊j之間有水路相連,則第i行的第j個數字為1,否則為0。每兩個數字之間輸出一個空格。如果存在多種可能,只需給出一種符合條件的情形。相鄰兩組測試資料之間輸出一個空行。
Sample Input
3
7
4 3 1 5 4 2 1
6
4 3 1 4 2 0
6
2 3 1 1 2 1
Sample Output
YES
0 1 0 1 1 0 1
1 0 0 1 1 0 0
0 0 0 1 0 0 0
1 1 1 0 1 1 0
1 1 0 1 0 1 0
0 0 0 1 1 0 0
1 0 0 0 0 0 0
NO
YES
0 1 0 0 1 0
1 0 0 1 1 0
0 0 0 0 0 1
0 1 0 0 0 0
1 1 0 0 0 0
0 0 1 0 0 0
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <memory.h>
using namespace std;
const int maxn = 12;
class Pair
{
public:
int m_id;
int val;
};
bool cmp(Pair a, Pair b)
{
return a.val > b.val;
}
int main()
{
Pair p[maxn];
int ans[maxn][maxn];
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
p[i].m_id = i + 1;
scanf("%d", &p[i].val);
}
memset(ans, 0, sizeof(ans));
bool flag = true;
int num = n;
while (num--)
{
sort(p, p + n, cmp);
if (p[0].val == 0)
break;
for (int i = 1; i <= p[0].val; i++)
{
if (p[i].val > 0 && i < n)
{
ans[p[0].m_id][p[i].m_id] = ans[p[i].m_id][p[0].m_id] = 1;
p[i].val--;
}
else
{
flag = false;
break;
}
}
if (!flag)
break;
p[0].val = 0;
}
if (flag)
{
puts("YES");
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (j == 1)
printf("%d", ans[i][j]);
else
printf(" %d", ans[i][j]);
}
putchar('\n');
}
}
else
puts("NO");
if (T > 0)
putchar('\n');
}
return 0;
}
相關文章
- 【C/C++】 C++暫存器優化C++優化
- 【C++】C++基礎知識C++
- 【C++】C++之Lambda表示式C++
- C 與 C++C++
- C/C++工具C++
- C++C++
- [C++之旅] 7 C++類和物件C++物件
- 【C++】C++的位元組對齊C++
- 【C++】 C++知識點總結C++
- 【C++】C++之型別轉換C++型別
- 【C/C++】c++多程式與hiredis的淺使用C++Redis
- 學懂現代C++——《Effective Modern C++》之轉向現代C++C++
- (轉貼) C++,C#,Java功能比較 (.NET) (C#) (C/C++)C++C#Java
- C/C++複習C++
- 從C到C++C++
- C++呼叫C介面C++
- 【C++】 C++異常捕捉和處理C++
- C++學習筆記——C++ 繼承C++筆記繼承
- C++學習筆記-Cherno C++系列C++筆記
- C++圖C++
- C++——模板C++
- C++ 物件C++物件
- c++ mutableC++
- C++ pointerC++
- C++ 引用C++
- C++ bitsetC++
- vector——C++C++
- 【C++】引用C++
- C++概括C++
- C++ 模板C++
- C++(typename)C++
- C++(clock())C++
- c++ binderC++
- Essential C++C++
- c++ vectorC++
- c++:-3C++
- c++:-1C++
- c++:-2C++