数据结构(持续更新...) 例题 dijkstra

字符串

取消scanf保护输入

项目——xxx属性——c/c++——预处理器——预处理定义下箭头——编辑

添加 _CRT_SECURE_NO_WARNINGS

字符数组和字符串

char date[] = "june 14";
char *date = "june 14";
  1. 两种声明都可以作为字符串。尤其是,任何期望传递字符数组或字符指针的函数都能够接收这两种声明的date作为参数

  2. 区别:1.声明为数组时,可以任意修改储存在date中的字符。声明为指针时,date指向字符串字面量,不可修 改

    2.声明为数组时,date时数组名,声明为指针时,date为变量,可以指向其他字符串;

读写字符串

区分空白字符,空字符,空格符,制表符

  1. 空白字符:空白字符(whitespace)指的是任意dao多个基本空白字符(包括空格、制表符 、回车换行符 )的连续组合。

  2. 空字符(注意,不叫空白字符)是指' ',或者是字符的编码值为0的字符

1.输出字符串

char str = "Are we having funny yet";
printf("%s",str);
put(str)//自动换行

2.读入字符串

scanf("%s",str);//读入字符后,只输入第一个空白字符之前的字符串
get(str);//在换行符处停止

字符串库函数

  1. strcpy

char *strcpy(char *s1,char *s2);//将s2复制给s1
  1. strlen

char *strlen(const char *s);//返回s长度
  1. strcat

char *strcat(char *s1,const char *s2);//拼接s1,s2
int main() {
char *a;
gets(a);//使用未初始化变量a
printf("%s", a);
}

宏定义

#define LISTINCREMENT 100//注意没有分号
/*利用牛顿迭代法计算方程3x³-2x²-5=0在1附近的根,要求精确到1e-5,牛顿迭代公式x=x-f(x)/f'(x)。*/
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
float a = 1e-5;
float x = 1;
float x0 = x - (3 * x * x * x - 2 * x * x - 5) / (9 * x * x - 4 * x);
while (fabs(x-x0)>=a) {
x0 = x;
x = x - (3 * x * x * x - 2 * x * x - 5) / (9 * x * x - 4 * x);
}
printf("%lf", x);
}

 

dijkstra

//dijkstra
/*
数据
6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
结果:0 1 8 4 13 17*/
#include<stdio.h>
#define inf 0x7f
int main() {
int dis[20], e[20][20], b[20] = { 0 };
int m, n, min, u=0;
scanf_s("%d%d", &m,&n);//m个点,n条边 忘记点和边的区分
/*for (int i = 1; i <= m; i++) {//错误2
e[i][i] = 0;
for (int j = 1; j <= m; j++) {
e[i][j] = inf;
}
}*/
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
if (i == j) e[i][j] = 0;
else e[i][j] = inf;
}
}
for (int i = 1; i <= n; i++) {
int p, q, r;
scanf_s("%d%d%d", &p, &q, &r);
e[p][q] = r;
}
for (int i = 1; i <= n; i++) {//错误点1:忘记初始化dis[]
dis[i] = e[1][i];
}
for (int i = 1; i <= m; i++) {//m写成n
   min = inf;//int min =inf
for (int j = 1; j <= m; j++) {
//int min = inf;时间复杂度高
//dis[i] = e[1][i];错误1:初始化位置错误