Ejemplo n.º 1
0
int _sendMessage(message* msg) {
    nodeInfo* nodeToSend;
    
    //Cannot send a message to itself.
    if (msg->mdata.destination == thisNode.id) {
        printf("Cannot send message to itself!\n");
        return -1;
    }
    
    nodeToSend = nextNodeInRoute(msg);
    //printf("[NODE %d] Sending message (%d->%d) to node %d\n", thisNode.id, msg->mdata.source, msg->mdata.destination, nodeToSend->id);
    //Unknown routing error.
    if (nodeToSend == NULL) {
        printf("Unknown routing error!\n");
        return -2;
    }
    
    
    if (connectNode(nodeToSend) != 0) {
        printf("Couldn't connect to node %d!\n", nodeToSend->id);
        return -3;
    }
    
    if (msg->mdata.source == thisNode.id) {
        msg->mdata.messageId = currentMessageId++;
    }

    if(msgsnd(nodeToSend->msgid, msg, sizeof(message) - sizeof(long int), 0) == -1) {
        printf("Error sending message!\n");
        return -4;
    }
    
    return 0;
}
Ejemplo n.º 2
0
    int solve(vector<int> scores){
        int vertexCnt = scores.size() + 1;
        if(vertexCnt == 2){
            return scores[0];
        }

        vector<Node> graph(vertexCnt);
        buildChain(graph);

        int maxDegree = vertexCnt - 1;
        int currentMaxDegree = 2;
        int currentMaxScore = calcScore(scores, graph);

        while(currentMaxDegree < maxDegree){
            vector<Node*> exceptions;
            Node* nextAddedTarget = findNode(graph, currentMaxDegree);
            while(nextAddedTarget != NULL){
                exceptions.push_back(nextAddedTarget);
                Node* nextDepartedTarget = findNotConnected1DegreeNode(graph, exceptions);
                if(nextDepartedTarget != NULL){
                    departNode(graph, nextDepartedTarget);
                    connectNode(nextAddedTarget, nextDepartedTarget);
                    currentMaxScore = max(currentMaxScore, calcScore(scores, graph));
                    nextAddedTarget = findNode(graph, currentMaxDegree);
                }else{
                    break;
                }
            }
            currentMaxDegree++;
        }
        return currentMaxScore;
    }
Ejemplo n.º 3
0
 void connect(TreeLinkNode *root) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     if (root == NULL) return;
     TreeLinkNode* last = root;
     TreeLinkNode* head = NULL;
     TreeLinkNode* pre = NULL;
     TreeLinkNode* cur = NULL;
     while (last != NULL)
     {
         connectNode(last -> left, head, pre, cur);
         connectNode(last -> right, head, pre, cur);
         last = last -> next;
         if (last == NULL)
         {
             last = head;
             head = NULL;
             pre = NULL;
             cur = NULL;
         }
     }
 }
Ejemplo n.º 4
0
static void
addNodes (void)
{
  pwr_tStatus	sts;
  pwr_tNodeId	nid;
  qcom_sNode	node;
  gdb_sNode*	np;

  gdb_AssumeUnlocked;

  for (nid = qcom_cNNid; qcom_NextNode(&sts, &node, nid); nid = node.nid) {
    if ( node.connection != qcom_eNodeConnectionFull)
      continue;

    np = addNode(&node);
    if (node.flags.b.connected)
      connectNode(np);
  }

}