提问人:EchoInVoid 提问时间:4/2/2023 最后编辑:EchoInVoid 更新时间:4/2/2023 访问量:49
从控制台和文件读取相同的数据时,程序的行为会有所不同
Program behaves differently when read same data from console and file
问:
这是我的代码。 它用于使用 Dijkstra 算法求解单源最短路径问题。
#include <cstdio>
using namespace std;
int mp[2505][2505];
int n, m, s, t;
const int INF = INT_MAX/4;
int main()
{
// freopen(".\\IO\\stdin.in", "r", stdin);
for (int i=0; i<2505; i++)
for (int j=0; j<2505; j++)
mp[i][j] = i==j ? 0 : INF;
scanf("%d%d%d%d", &n, &m, &s, &t);
for (int i=0; i<m; i++)
{
int u, v, t;
scanf("%d%d%d", &u, &v, &t);
mp[u][v] = mp[v][u] = t;
}
int dis[3000];
for (int i=1; i<=n; i++)
dis[i] = INF;
dis[s] = 0;
bool walked[2505];
memset(walked, 0, sizeof(walked));
for (int i=1; i<=n; i++)
{
int minN = -1, minV = INF;
for (int j=1; j<=n; j++)
{
if (walked[j]) continue;
if (dis[j] < minV)
minV=dis[j], minN=j;
}
for (int p=1; p<=n; p++)
if (dis[minN] + mp[minN][p] < dis[p])
dis[p] = dis[minN] + mp[minN][p];
walked[minN] = 1;
}
printf("%d\n", dis[t]);
return 0;
}
我尝试将输入数据粘贴到控制台中,并得到了正确的答案。
但是当我写(就像开头的注释一样),将数据放入正确的文件中并运行程序时,它会打印.1559
freopen(".\\IO\\stdin.in", "r", stdin);
main()
0
输入数据有 6000+ 行,所以我把它放在 ubuntu pastebin。https://pastebin.ubuntu.com/p/7WhKQW2pZj/
其他信息: Windows 10
符合命令: C++ 标准:
C++11g++ a.cpp -o a.exe -Wall
答: 暂无答案
评论
C++ standard: C++11
-- 代码中没有任何内容专门涉及 C++11。除了那个非标准标头,你的整个代码都是 .#include <bits/stdc++.h>
C
freopen
#include < bits/stdc++.h>
?|为什么使用命名空间 std;
被认为是不好的做法?#include <cstdio>
swap
swap
swap
std::swap
gcd
gcd
std::gcd
using namespace std;