Pagini recente » Cod sursa (job #2602012) | Cod sursa (job #2299307) | Cod sursa (job #3127147) | Cod sursa (job #833787) | Cod sursa (job #934942)
Cod sursa(job #934942)
#include <fstream>
#include <vector>
#include <cstring>
#define nmax 155
#define oo (1<<30)
#define Vecin G[Nod][i]
using namespace std;
vector <int> G[nmax],Arb[nmax];
int N,Best,Dist[nmax],Queue[nmax];
bool used[nmax];
int Bfs2(int Start) {
int i,Left,Right,Nod;
Queue[Right=1]=Start;
Dist[Start]=0;
used[Start]=0;
for(Left=1;Left<=Right;Left++) {
Nod=Queue[Left];
for(i=0;i<Arb[Nod].size();i++)
if(used[Arb[Nod][i]]) {
Dist[Arb[Nod][i]]=Dist[Nod]+1;
Queue[++Right]=Arb[Nod][i];
used[Arb[Nod][i]]=0;
}
}
return Dist[Queue[Right]];
}
int Bfs(int Start) {
int i,Left,Right,Nod;
Queue[Right=1]=Start;
Dist[Start]=0;
used[Start]=1;
for(Left=1;Left<=Right;Left++) {
Nod=Queue[Left];
for(i=0;i<G[Nod].size();i++)
if(!used[Vecin]) {
Dist[Vecin]=Dist[Nod]+1;
Arb[Nod].push_back(Vecin);
Arb[Vecin].push_back(Nod);
Queue[++Right]=Vecin;
used[Vecin]=true;
}
}
return Queue[Right];
}
void initialise() {
memset(used,0,sizeof(used));
for(int i=1;i<=N;i++)
Arb[i].clear();
}
void solve() {
int i,Nod;
Best=oo;
for(Nod=1;Nod<=N;Nod++) {
initialise();
i = Bfs(Nod);
Best = min(Best,Bfs2(i));
}
}
void read() {
int x,y,M;
ifstream in("apdm.in");
in>>N>>M;
while(M--) {
in>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
in.close();
}
void write() {
ofstream out("apdm.out");
out<<(Best)<<'\n';
out.close();
}
int main() {
read();
solve();
write();
return 0;
}