static int solve() { int i, j, k, t; for (i = 0; i < n; i++) bfs1[i] = bfs2(i, i); for (i = 1, k = bfs1[0]; i < n; i++) if (bfs1[i] < k) k = bfs1[i]; if (k <= 3 || (k & 1)) return k; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (i == j || adj[i][j] == 0) continue; t = bfs2(i, j); if (t < k) k = t; if (k & 1) return k; } } return k; }
int main() { // freopen("input.txt", "r", stdin); char temp[20]; gets(temp); int flag = 0; for (int i = 0; temp[i]; i++) { if (temp[i] == ' ') { flag = 1; } } if (!flag) { sscanf(temp, "%d", &point_number); memset(vis, 0, sizeof(vis)); memset(maps, 0, sizeof(maps)); for (int i = 1; i <= point_number; i++) { int x, y; scanf("%d%d", &x, &y); if (i == 1) { left_x = x; left_y = y; } maps[x][y] = 1; } printf("%d %d\n", left_x, left_y); bfs(); } else { sscanf(temp, "%d %d", &left_x, &left_y); point_number = 1; memset(maps, 0, sizeof(maps)); maps[left_x][left_y] = 1; bfs2(); int ans = 0; for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { if (maps[i][j]) { ans++; } } } printf("%d\n", ans); for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { if (maps[i][j]) { printf("%d %d\n", i, j); } } } } return 0; }
std::vector<Territory*> bfs2(Territory* start, Territory* end, std::vector<Territory*> discovered, std::vector<Territory*> previous, std::vector<Territory*> visited){ std::vector<Territory*>::iterator i, j; visited.push_back(start); if(start == end){ //izlaz iz rekurzije std::vector<Territory*> path; path.push_back(start); Territory* cilj = start; while(1){ if(cilj==*(discovered.begin())) return path; for(i=discovered.begin(), j=previous.begin(); *i!=cilj; i++, j++); path.push_back(*j); cilj = *j; } } std::vector<Territory*> tmp = start->neighbours(); //DODAVANJE NOVIH PRONADJENIH CVOROVA (od istog owner-a) for(i=tmp.begin(); i!=tmp.end(); i++){ if(!contains(*i, discovered) && (start->owner() == (*i)->owner()) ){ discovered.push_back(*i); previous.push_back(start); } } //TRAZENJE PRVOG PRONADJENOG CVORA KOJI JOS NIJE POSECEN //cout << "Looking for new vertex " << endl; for(i=discovered.begin(); i!=discovered.end(); i++){ if(!contains(*i, visited) && (start->owner() == (*i)->owner()) ){ break; } } if(i!=discovered.end()){ return bfs2(*i, end, discovered, previous, visited); } //Cisto zbog warning std::vector<Territory*> war; return war; }
void solve() { int i,f; id=0; for(i=1;i<=n;i++) { for(f=1;f<=m;f++) { if(0 == map[i][f] && '1' == ch[i][f]) { ++id; bfs(id,i,f); } } } for(i=1;i<=n;i++) { for(f=1;f<=m;f++) { if(0 == map[i][f] && '0' == ch[i][f]) { now=-1; flag=0; bfs2(i,f); if(2 == flag) { continue; } idc[now]++; } } } for(i=1;i<=id;i++) { idc[i]=zimu[idc[i]]; } }