Esempio n. 1
0
bool PartSol::isAllowed(Pos const & pos) const
{
    for (auto it = std::begin(_queens); it != std::end(_queens); ++it)
    {
        if (isConflict(*it, pos))
            return false;
    }
    return true;
}
Esempio n. 2
0
    virtual bool process(const PreProcData *base_data, 
            const PreProcData *inc_data,
    		SimTempCache *sim_temp_cache) {
    	if (sim_temp_cache->m_name_is_include) {
    		// soso类型冲突,认为有风险
    		if (isConflict(base_data, inc_data, resource_)) {
    			return false;
    		}

    		// 公司和研究机构聚合有风险
    		if (startswith(sim_temp_cache->m_same_type_str, "11")
    				|| startswith(sim_temp_cache->m_same_type_str, "12")) {
    			return false;
    		} else if (sim_temp_cache->m_same_type_str == "") {
    			set<string>::iterator it = sim_temp_cache->m_same_type_set.begin();
    			for (; it != sim_temp_cache->m_same_type_set.end(); ++it) {
    				if (startswith(*it, "11") || startswith(*it, "12")) {
    					return false;
    				}
    			}
    		}

    		// 类型词,虽然有包含关系,地址不是高精度相同,认为聚合有风险
    		if (resource_->typeNameMap.find(base_data->m_format_name)
    				!= resource_->typeNameMap.end()
    				|| resource_->typeNameMap.find(inc_data->m_format_name)
    						!= resource_->typeNameMap.end()) {
    			if (sim_temp_cache->m_addr_sim < 0.52) {
    				sim_temp_cache->m_include_addr_tel_score -= resource_->max_idf
    						* 2;
    			}
    		}

    		if (sim_temp_cache->m_addr_sim >= 0.52) {
    			sim_temp_cache->m_include_addr_tel_score += resource_->max_idf * 2;
    		}

    		if (sim_temp_cache->m_same_tel_set.size() > 0) {
    			sim_temp_cache->m_include_addr_tel_score += resource_->max_idf;
    		}
    	}

    	if (sim_temp_cache->m_include_addr_tel_score > 0) {
    		sim_temp_cache->m_total_same_score +=
    				sim_temp_cache->m_include_addr_tel_score;
    	} else {
    		sim_temp_cache->m_total_diff_score +=
    				-sim_temp_cache->m_include_addr_tel_score;
    	}
    	return false;    
    }
	void DFS(vector<vector<string> > &collection, 
			vector<string> &board, int cur, int n) {

		if (cur == n) {
			collection.push_back(board);
			return;
		}

		for (int x=0; x<n; x++) {
			if (isConflict(board, x, cur) == false) {
				board[x][cur] = 'Q';
				DFS(collection, board, cur+1, n);
				board[x][cur] = '.';
			}
		}
	}
Esempio n. 4
0
 void queen(int row, int n) {
     if (row==n) {
         sum++;
         vector<string> one;
         for (int i=0;i<n;i++) {
             string row = "";
             for (int j=0;j<n;j++) {
                 if (j==solution[i]) row.push_back('Q');
                 else row.push_back('.');
             }
             one.push_back(row);
         }
         ret.push_back(one);
     } else {
         for (int i=0;i<n;i++) {
             solution[row] = i;
             if (!isConflict(row,i)) queen(row+1, n);
         }
     }
 }
Esempio n. 5
0
bool PartSol::isAllowed(Pos const & pos) const
{
    return all(_queens, [&pos](Pos const & q){ return !isConflict(q, pos); });
}