Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:牛啊!救救小第,怎么会超时啊!应该怎样优化In Reply To:牛啊!救救小第,怎么会超时啊!应该怎样优化 Posted by:04105330 at 2008-07-05 20:00:10 > #include<iostream> > #include<queue> > #define INF 100000 > using namespace std; > struct st { > int i; > int j; > }stu[150],a,d; > char str[100][100],ch; > int n,m,length; > int c[150][150]; > int step; > queue<st> q; > void dfs(st b){ > step = 0; > int e[150][150],i,j; > for(i = 0;i<n;i++) > for(j = 0;j<m;j++) > e[i][j] = 0; > while (1) { > int len = q.size(); > while(len>0){ > a = q.front(); > if(a.i == b.i&&a.j==b.j) > return ; > if(a.i-1>=0&&str[a.i-1][a.j]!='#'&&e[a.i-1][a.j]==0){ > d.i = a.i -1; > d.j = a.j; > q.push(d); > e[d.i][d.j] = 1; > } > if(a.i+1<n&&str[a.i+1][a.j]!='#'&&e[a.i+1][a.j]==0){ > d.i = a.i+1; > d.j = a.j; > q.push(d); > e[d.i][d.j] = 1; > } > if(a.j+1<m&&str[a.i][a.j+1]!='#'&&e[a.i][a.j+1]==0){ > d.i = a.i; > d.j = a.j+1; > q.push(d); > e[d.i][d.j] = 1; > } > if(a.j-1>=0&&str[a.i][a.j-1]!='#'&&e[a.i][a.j-1]==0){ > d.i = a.i; > d.j = a.j-1; > q.push(d); > e[d.i][d.j] = 1; > } > len--; > q.pop(); > > } > step++; > } > } > void prim(){ > int lowcost[150]; > int closet[150]; > bool s[150]; > s[0] = true; > int i,j,k; > for(i = 1;i<length;i++){ > lowcost[i] = c[0][i]; > closet[i] = 1; > s[i] = false; > } > > for(i = 0;i<n;i++){ > int min = INF; > j = 0; > for(k = 1;k<length;k++) > if(lowcost[k]<min&&(!s[k])){ > min = lowcost[k]; > j = k; > } > s[j] = true; > for(k = 1;k<length;k++) > if(c[j][k]<lowcost[k]&&(!s[k])){ > lowcost[k] = c[j][k]; > closet[k]=j; > } > } > int sum = 0; > for(i = 1;i<length;i++) > sum+=lowcost[i]; > printf("%d\n",sum); > > > } > int main() > { > int t,i,j; > // freopen("in.txt","r",stdin); > scanf("%d",&t); > while (t--) { > scanf("%d%d",&m,&n); > length = 0; > for(i = 0;i<n;i++){ > scanf("%c",&ch); > for(j = 0;j<m;j++){ > scanf("%c",&str[i][j]); > if(str[i][j]=='S'||str[i][j]=='A'){ > stu[length].i = i; > stu[length].j = j; > length++; > } > } > } > for(i = 0;i<length;i++){ > c[i][i] = 0; > for(j = i+ 1;j<length;j++){ > q.push(stu[i]); > dfs(stu[j]); > c[i][j] = step; > c[j][i] = step; > step = 0; > while (!q.empty()) > q.pop(); > } > } > prim(); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator