//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.18; contract SimpleStore { function set(uint _value) public { value = _value; } function get() public constant returns (uint) { return value; } uint[] users; uint num_users=0; mapping (uint => string) usernames; mapping (uint => uint[3][]) account; function registerUser(uint use_id, string user_name) public{ users.push(use_id); num_users+=1; parent.push(-1); dist.push(-1); usernames[use_id]=user_name; } function createAcc(uint user_id1, uint user_id2, uint contri1, uint contri2) public{ account[user_id1].push([contri1, user_id2, contri2]); account[user_id2].push([contri2, user_id1, contri1]); } function getPath() public constant returns (uint[]) { return path; } function getTxnState() public constant returns (bool) { return txn_success; } function sendAmount(uint source, uint destination, uint amount) public{ txn_success=false; for(uint i=0;i<num_users;i++){ parent[i]=-1; dist[i]=-1; path.length=0; queue.length=0; } index=0; queue.push(source); while(true){ uint curr=queue[index]; index+=1; uint len=account[curr].length; for(uint j=0; j<len;j++){ uint v=account[curr][j][1]; if(account[curr][j][0]<amount){ continue; } if(dist[v]==-1 || dist[v]>dist[curr]+1){ dist[v]=dist[curr]+1; queue.push(v); parent[v]=int(curr); } } if(index==queue.length){ break; } } path.push(destination); int curdest=int(destination); while(true){ if(curdest==int(source)){ break; } curdest=parent[uint(curdest)]; if (curdest!=-1){ path.push(uint(curdest)); }else{ path.length=0; break; } } if (destination==source){ txn_success=true; }else if(path.length==0){ txn_success=false; }else{ for(j=0;j<path.length-1;j--){ uint neighbour1=path[j]; uint neighbour2=path[j+1]; for(uint k=0;k<account[neighbour1].length;k++){ if(account[neighbour1][k][1]==neighbour2){ account[neighbour1][k][0]+=amount; account[neighbour1][k][2]-=amount; break; } } for(k=0;k<account[neighbour2].length;k++){ if(account[neighbour2][k][1]==neighbour1){ account[neighbour2][k][2]+=amount; account[neighbour2][k][0]-=amount; break; } } } txn_success=true; } } function closeAccount(uint user_id1, uint user_id2) public { bool s=false; for(uint i=0;i<account[user_id1].length;i++){ if(account[user_id1][i][1]==user_id2){ s=true; } if(s){ if(i+1==account[user_id1].length){ account[user_id1].length--; }else{ account[user_id1][i]=account[user_id1][i+1]; } } } s=false; for(i=0;i<account[user_id2].length;i++){ if(account[user_id2][i][1]==user_id1){ s=true; } if(s){ if(i+1==account[user_id2].length){ account[user_id2].length--; }else{ account[user_id2][i]=account[user_id2][i+1]; } } } } int[] parent; int[] dist; bool[] vis; uint index; uint[] queue; uint[] path; uint value; bool txn_success; }
0.4.18