Find a way

N - Find a way

 
思路:两次bfs,分别计算出到达‘@’要花费的时间,然后相加。注意可能到达不了‘@’。
代码:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,m;
char maze[202][202];
int tag[202][202],c[202][202];//数组tag用来标记是否走过,数组c用来标记需要花的步数
int go[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
struct node
{
    int x;
    int y;
    int step;
};
void bfs(int i,int j)
{
    node a,b;
    queue<node>q;
    a.x=i;
    a.y=j;
    a.step=0;
    q.push(a);
    while(!q.empty())
    {
        a=q.front();
        q.pop();
        b.step=a.step+1;
        for(int i=0;i<4;i++)
        {
            b.x=a.x+go[i][0];
            b.y=a.y+go[i][1];
            if(maze[b.x][b.y]=='#'||b.x<0||b.y<0||b.x>=n||b.y>=m)//出界或者是为障碍物
                continue;
            if(tag[b.x][b.y]!=0)//曾经走过
                continue;
            tag[b.x][b.y]=1;
            c[b.x][b.y]+=b.step;//每个人走的步数相加
            q.push(b);
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int ma=500;
        memset(maze,0,sizeof(maze));
        memset(c,0,sizeof(c));
        for(int i=0;i<n;i++)
            scanf("%s",maze[i]);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(maze[i][j]=='Y'||maze[i][j]=='M')
                {
                    memset(tag,0,sizeof(tag));
                    bfs(i,j);
                }

            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(maze[i][j]=='@'&&c[i][j]<=ma&&c[i][j]!=0)
                    ma=c[i][j];
            }
        }
        printf("%d\n",ma*11);
    }
    return 0;
}

<think>好的,用户想通过Sui Explorer和自定义RPC端点来追踪特定账户的取款交易,具体涉及两个地址。首先,我需要回忆Sui区块链的基本结构和交易追踪的方法。Sui Explorer是官方工具,通常用于查看交易、地址和对象等信息,但用户提到要连接自定义RPC,这可能意味着需要配置Explorer使用自己的节点。 接下来,用户提到了两个地址,0xb88...和package地址0x253...。需要确定这两个地址在交易中的角色。前者可能是一个账户地址,后者可能是一个智能合约的包地址。取款交易通常涉及调用合约的函数,所以可能需要检查与该合约交互的交易。 第一步,用户可能需要配置Sui Explorer连接到自定义RPC。我记得Sui Explorer允许设置自定义RPC端点,通常在设置或网络选项中修改。用户需要确保他们的节点已经正确运行,并且RPC端口开放。 然后,如何追踪特定地址的交易。在Sui Explorer中,可以通过地址页面查看所有相关交易。输入地址0xb88...,查看其交易历史,特别是涉及package 0x253...的交易。可能需要筛选交易类型,比如查找函数调用,尤其是取款操作。 另外,Sui的交易结构基于Move语言,每个交易会有发送者、接收者、调用的函数和参数。用户需要找到从0xb88...发起的,调用suinado_cash包中withdraw函数的交易。可能需要检查交易的事件或对象变化,比如代币转移。 如果通过Explorer无法满足需求,可能需要使用Sui CLI或直接查询RPC。比如,使用sui client transactions命令列出地址的所有交易,再用sui client tx-block查看详细信息。或者编写脚本调用RPC的suix_queryTransactions方法,过滤sender和函数参数。 另外,用户可能需要关注Move调用中的参数,检查输入和输出对象的变化。比如,取款操作可能会导致某个代币对象从合约转移到用户地址,通过跟踪对象的Owner字段变化可以确认。 需要注意的是,Sui的数据模型基于对象,每个交易会修改对象的状态。因此,取款交易应该涉及到某个Coin对象的转移,从合约持有变为用户持有。可以通过查询该用户地址下的Coin对象历史记录来追踪。 最后,用户可能需要组合多个方法:先通过Explorer大致定位,再用CLI或自定义脚本深入分析。同时,确保自定义RPC节点同步到最新的区块,以获取准确的交易数据。</think>要追踪特定账户在Sui区块链上的取款交易,可通过以下步骤结合Sui Explorer和自定义RPC实现: ### 1. **配置自定义RPC节点** 在Sui Explorer右上角选择「齿轮图标」→「Network」→「Custom RPC」,输入您的节点URL(格式:`http://[IP]:9000`)。确保节点已同步到最新区块高度[^1]。 ### 2. **地址交易追踪** 在Sui Explorer搜索栏输入地址: `0xb88bb374a09305864032ffdcc9a15a2e1a0cd9d55b239d5158ac7e426487b0cb` 重点关注: - **Move调用过滤**:筛选`Package ID: 0x253899d91a9d03d34e47368a251140634fc9cf89ade188e2f1016f5ce9102344` - **事件类型**:查找`WithdrawEvent`或类似自定义事件 ### 3. **CLI高级查询(可选)** ```bash # 查询地址所有交易 sui client transactions --address 0xb88bb374a09305864032ffdcc9a15a2e1a0cd9d55b239d5158ac7e426487b0cb # 解析具体交易 sui client tx-block --show-balance-changes [DIGEST] ``` ### 4. **RPC直接调用** 使用`suix_queryTransactions`方法过滤: ```json { "filter": { "FromAndToAddress": { "from": "0xb88bb374...", "to": "0x253899d9..." } }, "options": { "showInput": true, "showEffects": true } } ``` ### 5. **Move合约分析** 检查package`0x253899d9...`的源码,确认取款函数的标识符,例如: $$ \text{function withdraw}(Coin<T>, \text{address}) $$ 通过交易输入参数中的`arguments`字段验证资金流向[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值