C - 友達の友達 / AtCoderBeginnerContest#016

#include <algorithm>
#include <iostream>
using namespace std;
 
#define INF (1<<29)
 
int data[10][10];
 
void Warshall_Floyd(int n)	{
	for (int i=0; i<n; ++i)
		for (int j=0; j<n; ++j)
			for (int k=0; k<n; ++k)
				data[j][k]=min(data[j][k],data[j][i]+data[i][k]);
}
 
void Solve(int n, int m)	{
	int a, b;
 
	for (int i=0; i<n; ++i)
		for (int j=0; j<n; ++j)
			if (i == j)	data[i][j]=0;
			else	data[i][j]=INF;
	for (int i=0; i<m; ++i)	{
		cin >> a >> b;
		data[a-1][b-1]=data[b-1][a-1]=1;
	}
	Warshall_Floyd(n);
	for (int i=0; i<n; ++i)	{
		int answer=0;
		for (int j=0; j<n; ++j)
			if (data[i][j] == 2)	++answer;
		cout << answer << endl;
	}
}

ワーシャルフロイド法で友達との距離感を表し、
各人の友達の友達人数を出力。
~了~