Chatgpt AI这么恐怖?未就业就要失业了?

Chatgpt AI,这东西也太恐怖了吧?

看图,我询问chatgpt AI,基础算法中的SPFA求最短路的java代码的含义
它仅仅用了几秒的时间就完成了分析

防止大家看不懂我把中文翻译也贴出来了,不仅告知了大概逻辑,以及每个数组是如何使用的,甚至还能给我科普一下spfa是从Dijkstra优化演变过来的?这已经不是玩具的级别了吧?
请添加图片描述
请添加图片描述
请添加图片描述
“此 Java 代码使用 SPFA(最短路径更快算法)在图中查找最短路径。 SPFA 是 Dijkstra 算法的变体,用于在加权图中寻找从单个源节点到所有其他节点的最短路径。

该代码定义了一个名为 SPFA 的类,其中包含多个静态字段和方法。 main() 方法是程序的入口点,它初始化 n 和 m 的值,分别表示图中的节点数和边数。 然后它从标准输入中读取图的边,并使用 add() 方法将它们添加到邻接表中。 最后,它调用 SPFA() 方法来查找最短路径。

add() 方法用于将边添加到图的邻接表中。 邻接表使用数组e、ne和w实现,分别存储每条边的目的节点、下一个节点和边权重。 SPFA() 方法使用队列遍历图并更新 dist 数组,该数组存储从源节点到图中每个其他节点的最短距离。 最后,它打印从源节点到目标节点(即节点 n)的最短距离。 如果不存在路径,则打印“不可能”。”

spfa java代码如下:
说实话,分析的基本上完全准确,太可怕了,几秒的时间啊!!!!

public class SPFA{
    public static int N = 1000010, index = 0, large = 0x3f3f3f3f, n, m;
    public static int[] h = new int[N], e = new int[N], ne = new int[N], w = new int[N];
    public static int[] dist = new int[N];
    public static boolean[] st = new boolean[N];

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt(); m = in.nextInt();
        Arrays.fill(h, -1);

        while (m-- > 0) {
            int x = in.nextInt(), y = in.nextInt(), c = in.nextInt();
            add(x, y, c);
        }

        SPFA();
    }

    public static void add(int x, int y, int c) {
        e[index] = y;
        w[index] = c;
        ne[index] = h[x];
        h[x] = index++;
    }

    public static void SPFA() {
        Arrays.fill(dist, large);
        dist[1] = 0;
        Queue<Integer> q = new ArrayDeque<>();
        q.add(1);
        st[1] = true;

        while (q.size() > 0) {
            int t = q.poll();
            st[t] = false;

            for (int i = h[t]; i!=-1; i = ne[i]) {
                int j = e[i];
                if (dist[j] > dist[t] + w[i]) {
                    dist[j] = dist[t] + w[i];
                    if (!st[j])  {
                        q.add(j);
                        st[j] = true;
                    }
                }
            }
        }
        if (dist[n]==large) System.out.println("impossible");
        else System.out.println(dist[n]);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值