T1 小田的四则运算

思路:用第一个数和第二个数相加和相乘作比较,存在sum里,然后和第三个数作比较,得出最够结果;

输入 #1

1 2 3

输出 #1

9

因(1+2)*3=9,最大;

输入 #2

2 2 3

输出 #21

12

因2 * 2 * 3=12,最大;

T5 小W走迷宫

思路:这道题要用搜索做,深搜和广搜都可以;

输入数据 1

6 6
.*.#..
.#....
..##..
......
.#....
....@.

用s标出路线

6 6 .* s#. . .#s s s . . .##s . . . . . s . .#. . s . .. . .@. 一共要8步; DFS写法 代码:

void dfs(int x,int y,int d){
	dis[x][y]=d;
	for(int i=0;i<=3;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx>0&&ny>0&&nx<=m&&ny<=n&&mp[nx][ny]=='.'&&d+1<dis[nx][ny]){
			dfs(nx,ny,d+1);
		}
	}
}

T6 小W去旅游

思路:图论; 模版: 1,Floyd求最短路

for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
               if(d[i][j]>d[i][k]+d[k][j])
                    d[i][j]=d[i][k]+d[k][j];

2,Dijkstra求最短路

#include <bits/stdc++.h>  
using namespace std;  
int arr[1005][1005];//邻接矩阵存储每条边  
int dist[1005];//i的最短路长度  
bool v[1005];//标记数组  
int n, m, ans;  
  
int dijkstra() {  
    memset(dist, 0x3f, sizeof(dist));//dist数组初始化最大  
    memset(v, 0, sizeof(v));//节点标记  
    dist[1] = 0; //节点1  
    for (int i = 1; i < n; i++) { //重复进行n-1次 ,还有n-1个点需要标记  
        int x = -1; //寻找未标记中 dist值最小的  
        for (int j = 1 ; j <= n ; j++) {  
            if (!v[j] && (x == -1 || dist[j] < dist[x])) x = j; //未标记且最小  
        }  
        v[x] = 1; //找到后标记该节点  
        for (int y = 1; y <= n; y++) { //用当前最小值x更新其他节点  
            dist[y] = min(dist[y], dist[x] + arr[x][y]); //更新最短路  
        }  
    }  
    if (dist[n] == 0x3f3f3f3f) return -1; //未更新输出-1  
    return dist[n];  
}  
int main() {  
    scanf("%d%d", &n, &m);  
    //构建邻接矩阵  
    memset(arr, 0x3f, sizeof(arr)); //极大  
    for (int i = 1; i <= n; i++) arr[i][i] = 0;  
    for (int i = 1; i <= m; i++) { //存边  
        int x, y, z;  
        scanf("%d%d%d", &x, &y, &z);  
        arr[x][y] = min(arr[x][y], z); //有重边只保留最小边  
    }  
    ans = dijkstra();  
    printf("%d\n", ans);  
    return 0;  
}

未完待续