#include<bits/stdc++.h>usingnamespace std;int a[80], g[80], c[80];string add(string x, string y){string temp;for(int i =0; i < x.size();++i){a[x.size()- i -1]= x[i]-'0';}for(int i =0; i < y.size();++i){g[y.size()- i -1]= y[i]-'0';}int ans =max(x.size(), y.size());for(int i =0; i < ans;++i){c[i]+= a[i]+ g[i];c[i +1]= c[i]/10;c[i]%=10;}ans++;if(c[ans -1]==0&& ans >1)ans--;for(int i =0; i < ans;++i){temp +=to_string(c[ans - i -1]);}memset(a,0,sizeof(a));memset(g,0,sizeof(g));memset(c,0,sizeof(c));return temp;}string mul(string x, string y){string temp;for(int i =0; i < x.size();++i){a[x.size()- i -1]= x[i]-'0';}for(int i =0; i < y.size();++i){g[y.size()- i -1]= y[i]-'0';}int ans =max(x.size(), y.size());for(int i =0; i < ans;++i){for(int j =0; j < ans;++j){c[i + j]+= a[i]* g[j];c[i + j +1]+= c[i + j]/10;c[i + j]%=10;}}int as = x.size()+ y.size();while(c[as -1]==0&& as >1)as--;for(int i =0; i < as;++i){temp +=to_string(c[as - i -1]);}memset(a,0,sizeof(a));memset(g,0,sizeof(g));memset(c,0,sizeof(c));return temp;}intmain(){int n;string s ="0";cin >> n;for(int i =1; i <= n;++i){string jc ="1";for(int j =1; j <= i;++j){string k =to_string(j);jc =mul(jc, k);}s =add(s, jc);}cout << s;}
搜索
BFS
#include<iostream>#include<string>#include<cmath>#include<iomanip>#include<algorithm>#include<queue>usingnamespace std;int a[100][100], v[100][100];int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};structpoint{int x;int y;int step;};
queue<point> r;intmain(){int n, m, startx, starty, p, q;cin >> n >> m;for(int i =1; i <= n;++i){for(int j =1; j <= m;++j){cin >> a[i][j];}}cin >> startx >> starty >> p >> q;// BFSpoint start;start.x = startx;start.y = starty;start.step =0;r.push(start);v[startx][starty]=1;int flag =0;while(!r.empty()){int x = r.front().x;int y = r.front().y;if(x == p && y == q){flag =1;cout << r.front().step;break;}for(int i =0; i <4;++i){int tx, ty;tx = x + dx[i];ty = y + dy[i];if(a[tx][ty]==1&& v[tx][ty]==0){point temp;temp.x = tx;temp.y = ty;temp.step = r.front().step +1;r.push(temp);v[tx][ty]=1;}}r.pop();}if(flag==0){cout<<"No Answer";}return0;}
DFS
#include<iostream>usingnamespace std;int p, q;int miN =99999999;int a[100][100];// 1是空地,2是障碍物int v[100][100];//0表示未访问,1表示访问int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};voiddfs(int x,int y,int step){if(x == p && y == q){if(step < miN)miN = step;return;}// 顺时针试探for(int i =0; i <4;++i){int tx, ty;tx = x + dx[i];ty = y + dy[i];if(a[tx][ty]==1&& v[tx][ty]==0){v[tx][ty]=1;dfs(tx, ty, step +1);v[tx][ty]=0;}}return;}intmain(){int m, n;int startx, starty;cin >> m >> n;for(int i =1; i <= m;++i){for(int j =1; j <= n;++j){cin >> a[i][j];}}cin >> startx >> starty >> p >> q;v[startx][starty]=1;dfs(startx, starty,0);cout << miN;return0;}
#include<iostream>#include<algorithm>#include<string>#include<queue>#defineinf0x3f3f3f3fusingnamespace std;constint M =1e4+10;constint N =1000+10;int n, m, s;int mp[N][N];int dis[N], vis[N];int pre[N];voidinit(){memset(mp, inf,sizeof(mp));}voiddijkstra(int s){memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[s]=0;while(1){int mini =0, miN = inf;for(int i =1; i <= n;++i){if(vis[i]==0&& miN > dis[i]){mini = i;miN = dis[i];}}if(mini ==0)break;vis[mini]=1;for(int i =1; i <= n;++i){if(vis[i]==0&& dis[i]> dis[mini]+ mp[mini][i]){dis[i]= dis[mini]+ mp[mini][i];pre[i]=mini;}}}}voidoutput(int z){if(z==0)return;output(pre[z]);cout<<z<<"->";}intmain(){init();cin >> n >> m >> s;for(int i =0; i < m;++i){int u, v, w;cin >> u >> v >> w;if(w < mp[u][v]){mp[u][v]= mp[v][u]= w;}}dijkstra(s);cout<<dis[n]<<endl;for(int i =1; i <= n;++i){output(i);cout<<endl;}}
Kruskal算法
#include<iostream>usingnamespace std;constint maxn =5005;structnode{int u, v, w;} edge[200001];intcmp(node x, node y){return x.w < y.w;}int fa[maxn];intfind(int x){if(x == fa[x])return x;fa[x]=find(fa[x]);return fa[x];}intmain(){int N, M;cin >> N >> M;// N是结点,M是边for(int i =0; i < M;++i){cin >> edge[i].u >> edge[i].v >> edge[i].w;}for(int i =1; i <= N;++i){fa[i]= i;}int sum =0;int total =0;sort(edge, edge + M, cmp);for(int i =0; i < M;++i){int fx =find(edge[i].u);int fy =find(edge[i].v);if(fx != fy){fa[fx]= fy;sum += edge[i].w;total++;}}if(total < N -1)cout <<"orz";elsecout << sum;return0;}