Find a way

Find a way

 

Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. 
Yifenfei’s home is at the countryside, but Merceki’s home is in the center of city. So yifenfei made arrangements with Merceki to meet at a KFC. There are many KFC in Ningbo, they want to choose one that let the total time to it be most smallest. 
Now give you a Ningbo map, Both yifenfei and Merceki can move up, down ,left, right to the adjacent road by cost 11 minutes. 

InputThe input contains multiple test cases. 
Each test case include, first two integers n, m. (2<=n,m<=200). 
Next n lines, each line included m character. 
‘Y’ express yifenfei initial position. 
‘M’    express Merceki initial position. 
‘#’ forbid road; 
‘.’ Road. 
‘@’ KCF 
OutputFor each test case output the minimum total time that both yifenfei and Merceki to arrival one of KFC.You may sure there is always have a KFC that can let them meet.Sample Input

4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#

Sample Output

66
88
66

  题目大意:小Y和小M在n×m大小的地图上,寻找东西,他们相约在KFC(由'@'表示)中见面,已知地图中分布有若干个KFC,'.'为可通行的点,'#'为不可通过的地方,求他们走到最近的KFC要
多长时间,两人花费的时间分开计算并汇总,每走一步花费11分钟。
  思路:简单的搜索题,我一开始把它想复杂了,我想通过每个@到Y和M的距离,在进行比较,结果WA了好多次;然后尝试对人进行广搜,不设置终点,两人都搜一遍就行了。注意两人的初始标记位置都是
由1开始的,所以要减去2。代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <string.h>
#define LL long long
using namespace std;
int const max_n=201;
int n,m,sa,sb,ea,eb;
char mp[max_n][max_n];//地图信息数组
int used[max_n][max_n];//标记数组
int time[max_n][max_n];//这里主要是为了记录人到KFC花费的时间
int dd[4][2]={1,0,-1,0,0,1,0,-1};
struct test{
    int x,y;
};
queue<test>p;
bool judge(int x,int y){return x>=0&&x<n&&y>=0&&y<m;}//判断数组下标是否越界
int bfs()
{
    memset(time,0,sizeof(time));
    memset(used,0,sizeof(used));
    int tim=999999;//初始一个较大的时间值 
    test a;
    a.x=sa,a.y=sb;
    used[sa][sb]=1;
    p.push(a);
    while(p.size())
    {
        a=p.front();p.pop();
        if(mp[a.x][a.y]=='@')
        {
            time[a.x][a.y]+=used[a.x][a.y];//第一个人的时候直接加就好了
        }
        for(int i=0;i<4;i++)
        {
            int nx=a.x+dd[i][0];
            int ny=a.y+dd[i][1];
            if(mp[nx][ny]!='#'&&used[nx][ny]==0&&judge(nx,ny))
            {
                used[nx][ny]=used[a.x][a.y]+1;//用标记数组记录时间
                test e;
                e.x=nx,e.y=ny;
                p.push(e);
            }
        }        
    }
    memset(used,0,sizeof(used));//重置标记数组
    a.x=ea,a.y=eb;
    used[ea][eb]=1;
    p.push(a);
    while(p.size())//第二次广搜,对另一个人进行
    {
        a=p.front();p.pop();
        if(mp[a.x][a.y]=='@')
        {
            time[a.x][a.y]+=used[a.x][a.y];
            tim=min(time[a.x][a.y],tim);//把用时短的赋给tim
        }
        for(int i=0;i<4;i++)
        {
            int nx=a.x+dd[i][0];
            int ny=a.y+dd[i][1];
            if(mp[nx][ny]!='#'&&used[nx][ny]==0&&judge(nx,ny))
            {
                used[nx][ny]=used[a.x][a.y]+1;
                test e;
                e.x=nx,e.y=ny;
                p.push(e);
            }
        }        
    }
    
    return tim-2;//因为两次搜索都是从1开始的
}
int main()
{

    while(scanf("%d %d",&n,&m)!=EOF)
    {
        int h=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)//输入并寻找Y、M所在的位置
            {
                cin>>mp[i][j];
                if(mp[i][j]=='Y')sa=i,sb=j;
                if(mp[i][j]=='M')ea=i,eb=j;
            }
        }
        LL ss=bfs();
        printf("%d\n",ss*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、付费专栏及课程。

余额充值