Source Code Problem: 1094 User: Sunna Memory: 180K Time: 0MS Language: C++ Result: Accepted Source Code #include <stdio.h> #include <vector> using namespace std; #define NMAX 26 #define _determined 1 #define _cycle 0 #define _n_determined -1 int v,e; int map[26][26]; int deg[NMAX]; vector<int> ansvec; vector<int> odegvec; int Tsort(){ //count deg int cdel = 0; memset(deg,0,sizeof(deg)); odegvec.clear(); ansvec.clear(); for (int i=0; i<v; ++i){ for (int k=0; k<v; ++k){ if (1==map[i][k]) deg[k]++; } } //make stack of 0 degree vertex for (int i=0; i<v; ++i){ if (0==deg[i]){ odegvec.push_back(i); } } int cod = odegvec.size(); //count the number of deg[k]==zore int flag = _determined; if (0==cod) return _cycle; if (cod>1) flag = _n_determined; // ret == _cycle or _n_determined //tsort while (!odegvec.empty()){ //del the 0 degree t int t = odegvec.back(); odegvec.pop_back(); cdel++; //and add t to the anwser list if (flag != _n_determined) ansvec.push_back(t); //del the edge from t for (int k=0; k<v; ++k){ if (1==map[t][k]){// && 0==del[k] deg[k]--; //a new 0 degree vertex if(0==deg[k]) odegvec.push_back(k); } } if (odegvec.size()>1) flag = _n_determined; } //conclude if (v > cdel) return _cycle; if (_n_determined == flag) return _n_determined; int cansvec = ansvec.size(); if (v == cansvec) return _determined; } int main() { char low,mid,hi; bool sure; while (scanf("%d %d/n", &v,&e)){ if (0==v && 0==e) return 0; memset(map,0,sizeof(map)); sure = false; for (int i=0; i<e; ++i){ scanf("%c%c%c/n",&low,&mid,&hi); map[low-'A'][hi-'A']=1; // if _cycle or _determined we don't have to apply Tsort() if (sure) continue; // if not sure apply Tsort() int flag = Tsort(); if (_n_determined != flag) sure = true; if (_determined == flag){ printf("Sorted sequence determined after %d relations: ", i+1); //while (!ansvec.empty()) printf("%c", ansvec.); for (int k=0; k<ansvec.size(); ++k) printf("%c", ansvec[k]+'A'); printf("./n"); } else if (_cycle == flag){ printf("Inconsistency found after %d relations./n", i+1); } } if (!sure) printf("Sorted sequence cannot be determined./n"); } return 0; }