#include<iostream>
#include<vector>
#include<map>
using namespace std;
bool have_circle(int a[], int m)
{
vector<int> b(a, a+m*m);
map<int, int> rudu;
vector<int> stack;
for (int i = 0; i < m; i++)
{
int tmp(0);
for (int j = 0; j < m; j++){
tmp += a[i + j*m];
}
if (tmp == 0){
stack.push_back(i);
}
else{
rudu[i] = tmp;
//rudu.insert(std::make_pair(i, tmp));
//rudu.insert(std::pair<int, int>(i, tmp));
//rudu.insert(map<int, int>::value_type(i, tmp));
}
}//for
while (!stack.empty())
{
int x = *(stack.end() - 1);
stack.pop_back();
for (int i = 0; i < m; i++)
{
if (b[x*m + i]--){
rudu[i]--;
if (rudu[i] == 0){
stack.push_back(i);
rudu.erase(i);
}
}//if
}//for
}//while
if (rudu.empty()){
return 0;
}
else{
return 1;
}
//cout << *(b.end() - 4) << endl;
return 0;
}
int main()
{
int a[] = {0,1,0,0, 0,0,1,0, 1,0,0,0, 0,1,1,0};
int m=4;
cout << have_circle(a, m) << endl;;
}
003-algorithm-have circle-topology sort
最新推荐文章于 2024-03-03 21:39:31 发布