golang 检查路径是否存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 检查路径是否存在相关的知识,希望对你有一定的参考价值。

func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err != nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, nil
}

检查是否存在连接C ++中2个顶点的路径

我正在尝试编写一个代码来检查给定图形中从顶点v1v2的路径是否存在。它适用于某些测试用例,并为其他测试用例提供运行时错误(超出时间限制)。

bool HasPath(int V, int** edges, int* visited, int v1, int v2)
{
    if (edges[v1][v2] == 1)
    {
        return true;
    }

    for (int i = 0; i<V; i++)
    {
        if (visited[i] == 1)
            continue;

        if (edges[v1][i] == 1)
        {
            bool sa = HasPath(V, edges, visited, i, v2);
            visited[i] = 1;
            if (sa == false)
                continue;
            else
                return true;
        }
    }
    return false;
}

int main() {
    int V, E;
    cin >> V >> E;

    int** edges = new int*[V];
    for (int i = 0; i<V; i++)
    {
        edges[i] = new int[V];
        for (int j = 0; j<V; j++)
        {
            edges[i][j] = 0;
        }
    }

    for (int i = 0; i<E; i++)
    {
        int f, s;
        cin >> f >> s;
        edges[f][s] = 1;
        edges[s][f] = 1;
    }

    int* visited = new int[V];
    for (int i = 0; i<V; i++)
        visited[i] = 0;

    int v1, v2;
    cin >> v1 >> v2;
    bool ans = HasPath(V, edges, visited, v1, v2);
    if (ans == 1)
        cout << "true";
    else
        cout << "false";
    return 0;
}

边缘是邻接矩阵。图表是双向的。目的是找出从v1v2的路径是否存在。输入格式: 第1行:VE 下一个E线:两个整数ab,表示在顶点a和顶点b(由空格分隔)之间存在边缘 线(E+2):两个整数v1v2(由空格分隔)

示例测试用例失败:

6 3
5 3
0 1
3 4
0 3 (these are the vertices between which we need to find path)

上述测试用例的图表:

Here is the image of the graph for the above test case

通过的示例测试用例:

4 4
0 1
0 3
1 2
2 3
1 3
答案

我做的主要改变是在递归调用之前递归函数HasPath标记为visit(visited[i] = 1;)。我还对您的代码进行了一些细微的更改。

另外,不要忘记删除动态分配的内存(即使它在这里不重要。)

#include <iostream>
using namespace std;

bool HasPath(int V, int** edges, int* visited, int v1, int v2)
{
    if (edges[v1][v2] == 1)
        return true;

    for (int i = 0; i<V; i++)
    {
        if (visited[i] != 1 && edges[v1][i] == 1)
        {
            visited[i] = 1;
            if (HasPath(V, edges, visited, i, v2))
                return true;
        }
    }
    return false;
}

int main() 
{
    int V, E;
    cin >> V >> E;

    int** edges = new int*[V];
    for (int i = 0; i<V; i++)
    {
        edges[i] = new int[V];
        for (int j = 0; j<V; j++)
        {
            edges[i][j] = 0;
        }
    }

    for (int i = 0; i<E; i++)
    {
        int f, s;
        cin >> f >> s;
        edges[f][s] = 1;
        edges[s][f] = 1;
    }

    int* visited = new int[V];
    for (int i = 0; i<V; i++)
        visited[i] = 0;

    int v1, v2;
    cin >> v1 >> v2;
    bool ans = HasPath(V, edges, visited, v1, v2);
    cout << (ans == 1 ? "true" : "false");

    for (int i = 0; i < V; i++)
        delete[] edges[i];

    delete[] edges;
    delete[] visited;

    return 0;
}

以上是关于golang 检查路径是否存在的主要内容,如果未能解决你的问题,请参考以下文章

golang 检查Golang中是否存在文件或目录

使用golang检查数据库表是不是存在

检查路径是否存在与创建指定路径(mfc)

如何检查文件路径是不是存在

使用 DFS 检查二叉树中是不是存在路径不起作用

javascript 在'require'之前检查路径是否存在。如果不存在,则回退到默认路径