七月二十一日学习笔记

131:Channel Allocation

原理和代码部分还是懵懵懂懂

#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
#define maxN 30
int Max=0;
int color[maxN];
vector<int> vec[maxN];
 
int sulotion(int n){
    int minuse=0;
    for (int i=0; i<n; ++i){
        memset(color,0,sizeof(color));
        
        for (int j = 1; j < vec[i].size(); j++){
            int adjpos = vec[i][j];
            if (vec[adjpos][0]==-1) continue;
            color[vec[adjpos][0]]=1;
        }
        int j=-1;
        //找到最小未被使用的颜色
        while ( color[++j] ) ;
        //着色
        vec[i][0]=j;
        minuse = minuse>j?minuse:j;
    }
    return minuse+1;
}
 
int main()
{
    int n;
    cin>>n;
    string s;
    while ( n  ){
        for ( int i=0; i<n;++i ){
            vec[i].clear();
        }
        for ( int i=0; i<n; ++i ){
            cin>>s;
            for ( int j=0; j<s.length();++j ){
                if ( s[j]==':' ) continue;
                vec[i].push_back(s[j]-'A');
            }
            vec[i][0]=-1;
        }
        int num = sulotion(n);
        if (num==1)
            cout<<num<<" channel needed."<<endl;
        if ( num>1 )
            cout<<num<<" channels needed."<<endl;
        cin>>n;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/81144282