我贴一个代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <map>
#include <stack>
#include <math.h>
#include <queue>
using namespace std;
int num[10],n,m,ans;
bool visited[10];
char str[15][15];
int newnum[15];
void dfs(int x){
if(x==n){
memset(newnum,0,sizeof(newnum));
for(int i=1;i<=m;i++)
for(int j=0;j<n;j++)
newnum[i]=newnum[i]*10+(str[i][num[j]]-'0');
sort(newnum+1,newnum+1+m);
ans=min(ans,newnum[m]-newnum[1]);
}
for(int i=1;i<=n;i++){
if(!visited[i]){
visited[i]=1;
num[x]=i;
dfs(x+1);
visited[i]=0;
}
}
}
int main(){
int i,j;
while(scanf("%d%d",&m,&n)!=EOF){
memset(visited,0,sizeof(visited));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%1s",&str[i][j]);
ans=2000000000;
dfs(0);
printf("%d\n",ans);
}
return 0;
}