//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.25; contract p2p { struct User { uint user_id; string user_name; uint[] connected_users; mapping(uint => uint) edge_balances; // uint[] balances; } // User[] users; uint[] users; mapping(uint => User) registered_users; mapping(uint=>bool) visited; mapping(uint=>uint) pred; function registerUser(uint user_id, string user_name) public { User memory u = User(user_id,user_name,new uint[](0)); registered_users[user_id]= u; users.push(user_id); // users.push(User(user_id,user_name, new uint[](0),new uint[](0))); } function createAcc(uint user_id_1,uint user_id_2, uint balance) public{ registered_users[user_id_1].connected_users.push(user_id_2); registered_users[user_id_1].edge_balances[user_id_2]=balance; registered_users[user_id_2].connected_users.push(user_id_1); registered_users[user_id_2].edge_balances[user_id_1]=balance; } function sendAmount(uint user_id_1,uint user_id_2,uint balance) public{ // User memory u1 = registered_users[user_id_1]; // User memory u2 = registered_users[user_id_2]; uint[] user_nodes; for(uint ii=0;ii<users.length;ii++){ visited[users[ii]]=false; pred[users[ii]]=0; } uint size = 1; user_nodes.push(user_id_1); // bool found = false; do{ uint[] user_nodes_next; uint size_next = 0; for(uint i=0;i<size;i++){ User u = registered_users[user_nodes[i]]; for(uint j=0;j<u.connected_users.length;j++){ uint user_id = u.connected_users[i]; if(!visited[user_id] && u.edge_balances[user_id]>=balance){ if(user_id!=user_id_2) { visited[user_id] = true; pred[user_id] = user_nodes[i]; user_nodes_next.push(user_id); size_next++; } else{ pred[user_id_2]=user_nodes[i]; visited[user_id_2]=true; break; } } } } user_nodes.length=0; for(uint k=0;k<size_next;k++){ user_nodes.push(user_nodes_next[k]); } size = size_next; } while(size > 0); for(uint ik=0;ik<users.length;ik++){ visited[users[ik]]=false; pred[users[ik]]=0; } } }
0.4.25